经过一段时间后中断线程,等待时不会阻塞

时间:2011-09-20 07:58:21

标签: c++ multithreading boost-thread

我想在后台启动一个帖子,并希望在一定时间后停止它,如果它没有完成。主要问题是,在等待线程完成或计时器到达截止日期时,程序不应该阻塞。重要的是保证这一点。

我尝试了this example,但在等待timed_join时,它会阻止。我必须发布警告说正在进行一些计算。

void CallbackReceived() {
  boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(500);
  boost::thread thrd(&Foo);

  if (thrd.timed_join(timeout)) {
    //finished
  } else {
    //Not finished;
  }
}

你有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你可以启动一个线程来启动你的线程并等待timed_join。

main
|
|---thread
|      |
|      |-----thread
|               |
|               |
|               |
|     join<------     
|
|

但是如果你只想要一个警告,请在启动线程之前把它放好。如果它是一个图形应用程序并且你仍然想要处理事件,你必须让你的主线程可用,如上所示。

答案 1 :(得分:0)

必须停止的线程可能会在一段时间后自行退出。

例如,如果它在循环中执行所有工作,它可以定期检查(例如,循环的每10次迭代),如果已经过了最大时间量,并且在时间已经过去的情况下退出。

主线程偶尔可以检查完成作业的线程(或过早终止)并删除它们。