PDA

Visualizza la versione completa : [c] problemi con CreateThread()


silver81
06-03-2009, 10:45
ho creato un server che tramite la funzione
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) funzione, (LPVOID) clientsd, 0, &ThreadId); invia pi client alla function funzione, il problema che fin quando il primo client che accede a funzione l'unico ad utilizzare la funzione tutto va bene, mentre se inizia ad accedere un secondo client alla function funzione e la usa ecco che il codice all'interno della function inizia a diventare ricorsivo, cio il simbolo del compilatore visual studio che indica la posizione thread inizia a muoversi avanti e indietro.

sapreste dirmi perch?

Stoicenko
06-03-2009, 10:50
b proprio perch pi thread accedono alla stessa funzione essi si trovano allo stesso momento in punti differenti.. fare debug "passo-passo" di una funzione multithread molto complicato..

silver81
06-03-2009, 11:24
no anche se il primo client termina la funzione si verifica lo stesso il problema quando entra il secondo client, ho letto che un thread ha uno stack forse la condivisione di questo stack che crea tutto ci, allora mi chiedo possibile che ogni client abbia un proprio stack?

shodan
06-03-2009, 12:35
Lo Stack univoco per thread. E' l'heap che condiviso.
E comunque bene usare la _beginthreadex in C.



http://msdn.microsoft.com/en-us/library/ms682453(VS.85).aspx
...
A thread in an executable that calls the C run-time library (CRT) should use the _beginthreadex and _endthreadex functions for thread management rather than CreateThread and ExitThread; this requires the use of the multi-threaded version of the CRT. If a thread created using CreateThread calls the CRT, the CRT may terminate the process in low-memory conditions.

Loading