2009-06-24 16 views
7

Czy można anulować wątek zwiększenia, tak jak w przypadku pthread?Zwiększenie anulowania wątku

Piszę prosty watchdog, aby zakończyć wątki robocze, jeśli się zawieszają i nie ma sposobu, aby po prostu anulować wątek w bibliotece Boost Thread.

Odpowiedz

10

Nie obsługują anulowania, co jest korzystne, ponieważ może powodować wszelkie subtelne problemy.

Zapoznaj się z sekcją dokumentacji, która obejmuje przerwanie wątku i wyjątek boost :: thread_interrupted i wymyśl coś, co pozwoli Ci osiągnąć to, czego chcesz, jednocześnie czyszcząc rzeczy.

+0

Wygląda na to, że przerwanie wątku boost nie pomoże, jeśli wątek utknie w pętli, co jest jedną z rzeczy, które próbuję chronić przed. Podczas rezygnacji z przenośności zaczynam myśleć, że najlepiej jest używać programu pthread do czyszczenia. –

+3

Lub umieść punkt (punkty) przerwania w dowolnym punkcie pętli. Nie powinno to być zbyt mocne, zwłaszcza jeśli wątek jest już długi. A reszta infrastruktury przerwania jest już gotowa. – Duck

2

one nie obsługują anulowanie wyjęciu z pudełka (jak podkreślił Duck), jednak w zależności od przetwarzania dzieje się wewnątrz wątku (ów) pracownika, Pomyślę użyciu boost::condition powiadomić wątek że powinien zakończyć się (czyściutko) przy najbliższej okazji.