_endthreadex (0) atîrnă

voturi
2

Am un cod pe care nu le-am creat inițial care utilizează _beginthreadex și _endthreadex. Din anumite motive, atunci când solicită _endthreadex (0), apelul doar se blochează și nu se întoarce. Orice idei cu privire la ceea ce ar cauza în mod normal, acest apel să stea?

Întrebat 09/12/2008 la 16:05
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
9

Răspunsul meu este prea departe târziu, dar încă cineva îl va folosi.

În cazul meu _endthreadex spânzurat când am descărca și dll șters unele obiecte globale. Unul dintre obiectele globale au avut un alt fir de interior și că firul efectuat, de asemenea, de ieșire a firului. Acest lucru a cauzat impas, deoarece DLLMain hartă deja blocat de memorie Nr. Citește DLLMain de ajutor și de a găsi că nu sunt permise face orice altă acțiune pe un alt fire sau procese în timpul apelului DLLMain.

Publicat 11/05/2012 la 21:10
sursa de către utilizator

voturi
4

_endthreadex se termină firul, astfel încât nu se poate întoarce. Asta e toată ideea numindu-l.

EDIT: Este un pic neobișnuit pentru a apela _endthreadex, în mod normal, ai lăsat doar procedura de pornire fir retur și runtime solicită _endthreadex pentru tine. Poate fi necesar pentru a explica un pic mai mult, ceea ce încercați să faceți înainte de a putea ajuta.

Publicat 09/12/2008 la 16:14
sursa de către utilizator

voturi
1

Atrageți din greșeală _endthreadex () pentru a încerca să se încheie cu un fir din firul principal?

Funcția _endthreadex () este menit să fie numit în interiorul firul pe care doriți să încheiați să raporteze o valoare de returnare, precum și pentru buna „recuperare a resurselor alocate pentru firul.“ Nu ar trebui să - l numim într - un destructor din firul principal. Ai putea, într - un destructor, semnal de la firul printr - un eveniment ( a se vedea SetEvent , numit de la firul principal) că firul trebuie să părăsească cât mai curând posibil, și apoi firul care iese ca ultima afirmație ar suna _endthreadex () .

Apelarea _endthreadex () în firul principal ar determina procesul să stea, pentru că ați terminat firul principal, dar va avea în continuare firul original , ai vrut să termine încă în funcțiune.

Publicat 09/12/2008 la 16:54
sursa de către utilizator

voturi
0

Ok .... bine, endthreadex este chemat în deconstructor din clasa mea prin „șterge classinstance“ ... și că apelul deconstructor nu se întoarce ... astfel încât întregul lucru se blochează

Publicat 09/12/2008 la 16:18
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more