Ho filo che può ospitare per lungo tempo, poi si sveglia per fare qualcosa, poi dormire di nuovo, in questo modo:come terminare un thread dormiente in pthread?
while(some_condition)
{
// do something
sleep(1000);
}
Come potrei fare questa uscita discussione con grazia e rapidamente?
Ho provato a utilizzare pthread_cancel()
, ma non è stato possibile annullare i thread in sospensione. Ho anche provato a cambiare la condizione del ciclo while, ma ci vorrà ancora molto tempo per uscire. E non voglio usare pthread_kill()
, poiché potrebbe interrompere il thread quando funziona.
Quindi, ci sono buone idee?
beh, penso di fare un errore, sleep() è un punto di annullamento limitato da posix.1 – qiuxiafei
Solo una nota - 'pthread_kill' non uccide un thread. Invia un segnale a un thread. Se l'azione di quel segnale è di terminare il processo (ad esempio, l'azione predefinita di 'SIGTERM', o l'azione sbloccabile di' SIGKILL'), terminerà * l'intero processo *, non il thread di destinazione. In realtà l'unica volta che 'pthread_kill' è utile è se hai installato un gestore di segnale di interruzione e vuoi interrompere un syscall che è bloccato in un particolare thread (che sarebbe una potenziale soluzione alla tua domanda). –