thread problem
- 
					
					
					
					
 typedef unsigned (__stdcall *PTHREAD_START) (void *); #define libCreateThread(psa, cbStack, pfnStartAddr, \ pvParam, fdwCreate, pdwThreadID) \ ((HANDLE) _beginthreadex( \ (void *) (psa), \ (unsigned) (cbStack), \ (PTHREAD_START) (pfnStartAddr), \ (void *) (pvParam), \ (unsigned) (fdwCreate), \ (unsigned *) (pdwThreadID))) typedef list<ServerSocket*> SERVERLIST; class ServerSocket { public: void run(); }; class Wrapper { public: bool start(); protected: static void startThread(LPVOID lpvoid); private: SERVERLIST _ServerHandles; } bool Wrapper::start() { HANDLE hThread = NULL; DWORD dwid = 0; bool retVal = false; SERVERLIST::iterator iter; iter = _ServerHandles.begin(); while(iter != _ServerHandles.end()) { /* vorher hThread = libCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(*iter)->run(), NULL, 0, &dwid); hatte funktioniert!!! */ hThread = libCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)startThread, (LPVOID)(*iter), 0, &dwid); if(hThread) { printf("Server launched! Thread ID = %04x launched\n", dwid); CloseHandle(hThread); } ++iter; } return retVal; } void Wrapper::startThread(LPVOID lpvoid) { ServerSocket* server = (ServerSocket*)lpvoid; EnterCriticalSection(&csThread); if(++_threadsStarted >= _maxThreadsAllowed) { --_threadsStarted; LeaveCriticalSection(&csThread); return; } LeaveCriticalSection(&csThread); server->run(); EnterCriticalSection(&csThread); --_threadsStarted; LeaveCriticalSection(&csThread); }hi. in _ServerHandles befindet sich zwei Einträge. 
 Wieso wird startThread niemals aufgerufen??
 
- 
					
					
					
					
 jemand ne Idee? 
 
- 
					
					
					
					
 man warte doch mal ab, is doch erst 30 minuten seit der fragestellung her. damit machst du dich unbeliebt :o 
 
- 
					
					
					
					
 sorry 
 
- 
					
					
					
					
 hab grad was rausgefunden... hThread = libCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(*iter)->run(), NULL, 0, &dwid); funzt auch nid.. wurde getäuscht, da (*iter)->run() direkt ausgeführt wird... und libCreateThread somit wartet, bevor es gestartet wird, bis run() beendet wurde! ??????????? 
 
- 
					
					
					
					
 nochwas... 
 wenn ich einen thread ausserhalb der klasse starte, funzt es prima!
 
- 
					
					
					
					
 was ich auch nicht kapier... 
 libCreadThread wird ganznormal ausgeführt...
 es returned nämlich nicht 0
 
- 
					
					
					
					
 es wird unheimlicher... wenn ich einen rebuild mache, wird threadStart beim ersten neuen Ausführen gestartet... bei jedem weiteren start, wird es nicht mehr ausgeführt!!! HILFE!!!!!!!!! 
 
- 
					
					
					
					
 hat sich erledigt! 
 war dumm!
 danke für eure Mühen! 
 
- 
					
					
					
					
 An was lag es, bei Threads hat so manch meiner Programme auch scheiße gemacht. 
 Ist csThread global?[ Dieser Beitrag wurde am 06.01.2003 um 12:32 Uhr von Nitromaus editiert. ] 
 
- 
					
					
					
					
 nö, ist private... ich war dumm, und es war spät. die threads wurden gestartet, doch bevor sie richtig da waren, war das haupt programm schon zu ende - hab ich mir ne message queue gebastelt, mit der ich warten kann, bis alle threads zu ende sind... war ein wenig verwirrt! *hehe*