Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wątek w klasie

Ostatnio zmodyfikowano 2016-10-11 12:55
Autor Wiadomość
sebox
Temat założony przez niniejszego użytkownika
Wątek w klasie
» 2016-10-08 11:20:22
Mam klasę w pliku client.h
C/C++
class Client
{
private:
    std::string name;
    sf::TcpSocket me;
public:
    Client( const std::string & name );
    ~Client();
    void wysylanie( Client client );
    sf::Socket::Status connect( const sf::IpAddress & IP, unsigned short port );
    sf::Socket::Status send( PacketType type, const std::string & msg );
    sf::Socket::Status receive( std::string & msg );
W pliku client.cpp mam metodę
C/C++
void Client::wysylanie( Client client )
{
    while( 1 )
    {
        string s;
        getline( std::cin, s );
        client.send( GENERAL_MSG, s );
    }
}
I chciałbym zrobić sobie z tej metody osobny wątek, próbowałem w taki sposób:
C/C++
Client client( name );
Thread thread( & Client::wysylanie, client );
thread.launch();
I dostaję błąd:

Error 1 error C2064: term does not evaluate to a function taking 1 arguments
Ktoś coś podpowie jak to powinienem zrobić?? :)
P-152323
pekfos
» 2016-10-08 12:26:41
Użyj std::thread.
P-152324
sebox
Temat założony przez niniejszego użytkownika
» 2016-10-08 14:02:21
Zrobiłem tak i jakiś dziwny błąd mam teraz:
C/C++
std::thread t( & Client::wysylanie, Client( name ) );


Error 1 error C2248: 'sf::NonCopyable::NonCopyable' : cannot access private member declared in class 'sf::NonCopyable'
P-152326
pekfos
» 2016-10-08 22:14:25
Nie możesz kopiować Client.
P-152338
Gibas11
» 2016-10-08 23:08:42
Uściślając chodzi o sf::TcpSocket, przechowuj w klasie wskaźnik na ten obiekt to będziesz mógł ją normalnie kopiować.
P-152339
pekfos
» 2016-10-11 12:55:24
To nie jest poprawne rozwiązanie. Do wątku należy przekazać wskaźnik na obiekt, a nie sam obiekt.
P-152435
« 1 »
  Strona 1 z 1