Книга: Программирование для Linux. Профессиональный подход

Листинг 4.9. (cxx-exit.cpp) Безопасное завершение потока в C++

Листинг 4.9. (cxx-exit.cpp) Безопасное завершение потока в C++

#include <pthread.h>
class ThreadExitException {
public:
 /* Конструктор, принимающий аргумент RETURN_VALUE, в котором
    содержится возвращаемое потоком значение. */
 ThreadExitException(void* return_value) :
  thread_return_value_(return_value) {
 }
 /* Реальное завершение потока. В программу возвращается
    значение, переданное конструктору. */
 void* DoThreadExit() {
  pthread_exit(thread_return_value_);
 }
private:
 /* Значение, возвращаемое в программу при завершении потока. */
 void* thread_return_value_;
};
void do_some_work() {
 while (1) {
  /* Здесь выполняются основные действия... */
  if (should_exit_thread_immediately())
   throw ThreadExitException(/* поток возвращает */NULL);
 }
}
void* thread_function(void*) {
 try {
  do_some_work();
 } catch (ThreadExitException ex) {
  /* Возникла необходимость завершить поток. */
  ex.DoThreadExit();
 }
 return NULL;
}

Оглавление книги

Похожие страницы

Генерация: 3.954. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз