|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Terminare correttamente un thread
Qual è il modo corretto per terminare dall'esterno un thread?
La struttura del thread è del tipo Codice:
while(!stop) { //Fai qualcosa Sleep(30000); } Inoltre sempre in generale quando è il caso di eseguire la CloseHandle su un thread? |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Comunque la cosa migliore è che il thread termini in modo "naturale", cioè che la funzione principale del thread termini o che venga eseguita prima una ExitThread(). L'ideale è appunto usare una variabile, nel tuo caso 'stop' da settare a TRUE per far terminare il ciclo. Il problema principale è che per la Sleep hai messo un tempo bello lungo (30 sec.), quindi ammesso di essere appena entrato nella Sleep, se si setta stop a TRUE, c'è da attendere 30 secondi! Una soluzione migliore è usare WaitForSingleObject. Crei un evento con CreateEvent e poi, nel tuo thread, usi WaitForSingleObject per fare il wait su quell'evento, specificando sempre i millisecondi di timeout che ti servono. Se qualcuno dall'esterno fa diventare l'evento "signaled", la WaitForSingleObject ritorna immediatamente e te ne accorgi perché restituisce WAIT_OBJECT_0 invece di WAIT_TIMEOUT (in caso di timeout). Quote:
Quindi quando il thread è terminato e non hai più bisogno di quel handle.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 22-06-2007 alle 14:09. |
||
![]() |
![]() |
![]() |
#3 | |||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Conosci l'equivalente su Linux? Basta un semplice pthread_cancel? Quote:
Ultima modifica di tomminno : 22-06-2007 alle 15:51. |
|||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:58.