problème avec les threads (associés aux sockets) sous windows

problème avec les threads (associés aux sockets) sous windows - C++ - Programmation

Marsh Posté le 20-02-2004 à 16:54:44    

Bonjour,
J'ai l'erreur suivante à la compilation :
 
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
 
j'ai essayé différents header (winbase.h, windows.h) mais n'y fait. Pouvez vous m'aider ?
La ligne indiquée par le compilateur est celle où il y a la fonction CreateThread(...).
 
voici un bout du code :

Code :
  1. int sockInfoClientSize = sizeof(sockInfoClient) ;
  2. semaphoreHandle = CreateSemaphore(NULL,4,4,NULL);
  3. while(1)
  4. {
  5.  newSocket = accept(mySocketServer, (SOCKADDR *)&sockInfoClient, &sockInfoClientSize);
  6.  if (newSocket != -1)
  7.  {
  8.   threadHandle[threadCounter]=CreateThread(NULL,NULL, ThreadProc, (LPVOID)threadCounter,NULL,&threadIdentifier);
  9.   threadCounter++ ;
  10.   WaitForMultipleObjects(MAXIMUM_WAIT_OBJECTS, threadHandle,TRUE,INFINITE);
  11.   CloseHandle(semaphoreHandle);
  12.  }
  13. }

Reply

Marsh Posté le 20-02-2004 à 16:54:44   

Reply

Marsh Posté le 20-02-2004 à 17:22:42    

est-ce que ça ne viendrait pas de la définition de la classe ?

Code :
  1. class getFile
  2. {
  3. private :
  4. /***threads' variables***/
  5. DWORD threadIdentifier;
  6. HANDLE threadHandle[nbThreads];
  7. HANDLE semaphoreHandle;
  8. int threadCounter ;
  9. /*other variables*/
  10. DWORD WINAPI threadProc(LPVOID lpParam) ;
  11. /*other methods*/
  12. public :
  13. getFile () ;
  14. void serverConnections () ;
  15. void clientConnections () ;
  16. };

Reply

Marsh Posté le 21-02-2004 à 00:47:35    

mmh ... ThreadProc doit etre static
 
une méthode pour y arriver, par exemple :
 

Code :
  1. class ma_classe
  2. {
  3.   void new_thread()
  4.   {
  5.      DWORD ThreadID;
  6.      HANDLE hThread = CreateThread(NULL, 0, internal_threadentry, this, 0, &ThreadID);
  7.      CloseHandle(hThread);
  8.   }
  9.   static DWORD WINAPI internal_threadentry(LPVOID lpParam)
  10.   {
  11.     (reinterpret_cast<ma_classe*>lpParam)->threadentry();
  12.     return 0;
  13.   }
  14.   void threadentry()
  15.   {
  16.   }
  17. };


 
sinon cf boost::thread :)
 
edit : sinon, par défaut, les membres d'une classes sont privés, donc  
 
  class getFile  
  {  
    private :
 
private: est inutile


Message édité par blackgoddess le 21-02-2004 à 00:48:58

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 21-02-2004 à 00:49:18    

Ce serait tres utile qu'on voit à quoi ressemble ta fonction ThreadProc.

Reply

Marsh Posté le 28-05-2004 à 14:38:16    

la méthode attachée au thread doit être static

Reply

Marsh Posté le 28-05-2004 à 15:12:03    

pointeur de fonction != pointeur de fonction member :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed