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*