2009-06-24 11 views
7

Können Sie einen Boost-Thread wie einen Pthread abbrechen?Boost Thread Cancelling

Ich schreibe einen einfachen Watchdog, um Worker-Threads zu beenden, wenn sie abstürzen und es scheint keine Möglichkeit zu geben, einfach einen Thread in der Boost-Thread-Bibliothek abzubrechen.

Antwort

10

Sie unterstützen nicht Abbrechen, was eine gute Sache ist, da es alle möglichen subtilen Probleme verursachen kann.

Werfen Sie einen Blick auf den Abschnitt der Dokumentation, die Thread-Unterbrechung und die boost :: thread_interrupted-Ausnahme abdecken und etwas gestalten, mit dem Sie erreichen, was Sie wollen, während Sie auch Dinge aufräumen.

+0

Es scheint wie Boost Thread-Unterbrechung wird Ihnen nicht helfen, wenn der Thread in einer Schleife stecken bleibt, das ist eine der Dinge, die ich versuche, gegen zu schützen. Während ich auf Portabilität verzichte, fange ich an zu denken, dass es am besten ist, einen pthread-Bereinigungshandler zu verwenden. –

+3

Oder legen Sie einen oder mehrere Unterbrechungspunkte in die Schleife (n). Es sollte nicht viel Leistung bringen, besonders wenn der Thread schon lange läuft. Und der Rest der Unterbrechungsinfrastruktur ist bereits vorhanden. – Duck

2

Sie unterstützen nicht von der Box Auslöschung (wie durch Ente darauf hingewiesen), jedoch in Abhängigkeit von der Verarbeitung in Ihrem Arbeitsthread geht (s), halte ich hätte gerne ein boost::condition mit dem Thread benachrichtigen dass es (sauber) zum frühestmöglichen Zeitpunkt fertig sein sollte.