Bonjour,
J'ai un petit souci avec l'utilisation des threads.
Mon programme contient en fait un socket, qui doit recevoir des données, pour ceci je créé un thread afin de ne pas bloquer le reste du programme.
Mon socket est déclaré comme membre privé de ma classe, et j'ai une méthode, publique, qui permet de lancer le thread d'écoute de données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Socket { public: Socket(); ~Socket(); void EcouteDonnees(); private: SOCKET sock; };Le seul problème maintenant, c'est que je ne sais pas "comment" faire mon thread... Je m'explique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void Socket::EcouteDonnees() { DWORD ThreadId; CreateThread(NULL, 0, ThreadEcouteDonnees, NULL, 0, &ThreadId); }
- Soit je créé un thread "normal", donc un thread externe à ma classe, mais à ce moment je ne pourrai pas accéder au membre "sock" de me classe, donc impossible de lire des données.
- Soit je créé mon thread comme étant une méthode de ma classe, c'est ce que j'ai fait, mais j'obtiens alors une erreur de ce type :
A noter que le code de création du thread est exactement le même que ci-dessus. La définition de mon thread :....(42) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
Voilà, si quelqu'un a une idée lumineuse, je suis tout ouïe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DWORD WINAPI Socket::ThreadEcouteDonnees(LPVOID lParam) { .... return 0; }
Merci !
Partager