2009-06-24 14 views
7

Si può annullare un Boost Thread come si farebbe con un pthread?Boost Thread Cancel

Sto scrivendo un semplice watchdog per terminare i thread worker se si bloccano e non sembra essere un modo per cancellare semplicemente un thread nella libreria Boost Thread.

risposta

10

Non supportano l'annullamento, il che è una buona cosa poiché può causare tutti i tipi di problemi sottili.

Dai un'occhiata alla sezione dei documenti che copre l'interruzione del thread e l'eccezione boost :: thread_interrupted e crea qualcosa che ti permetta di realizzare ciò che desideri mentre pulisci anche le cose.

+0

Sembra che aumentare l'interruzione del thread non ti aiuterà se il thread si blocca in un loop, che è una delle cose che sto cercando di proteggere contro. Mentre sto rinunciando alla portabilità, sto iniziando a pensare che sto meglio usando un gestore di pthread cleanup. –

+3

Oppure inserire un punto (i) di interruzione da qualche parte nei loop. Non dovrebbe essere un grosso problema di prestazioni, specialmente se il thread è già in esecuzione da molto tempo. E il resto dell'infrastruttura di interruzione è già in atto. – Duck

2

Non supportano annullando fuori dalla scatola (come sottolineato da Anatra), tuttavia a seconda del trattamento in corso all'interno del thread di lavoro (s), mi piacerebbe prendere in considerazione utilizzando un boost::condition per notificare il filo che dovrebbe finire (pulito) alla prima occasione.

Problemi correlati