C++ 如何在线程循环内等待

C++ 如何在线程循环内等待,c++,multithreading,wait,C++,Multithreading,Wait,我想知道如何才能等待一项工作完成,然后继续创建新的工作 while(!stop) { CreateWork(); waitForWorkToDone(); } wait不能阻止调用线程 我怎样才能做到这一点呢?创建一个信号怎么样。创建一个处理程序,创建CreateWork(),并在作业完成时发出信号!只是一个建议要实现这一点,您可以依靠操作系统提供的功能进行阻止,直到通知超时或不超时为止。因此,线程不会通过执行忙等待来正确地使用不必要的CPU周期,但仍然能够响应程序状态的更改。

我想知道如何才能等待一项工作完成,然后继续创建新的工作

while(!stop)
{
    CreateWork();
    waitForWorkToDone();
}
wait不能阻止调用线程
我怎样才能做到这一点呢?

创建一个信号怎么样。创建一个处理程序,创建
CreateWork()
,并在作业完成时发出信号!只是一个建议

要实现这一点,您可以依靠操作系统提供的功能进行阻止,直到通知超时或不超时为止。因此,线程不会通过执行忙等待来正确地使用不必要的CPU周期,但仍然能够响应程序状态的更改。对于POSIX线程,可以使用条件定时等待。我将用boost实现来说明,但这个概念通常是扩展的

do
{
  boost::unique_lock<boost::mutex> lock(state_change_mutex);
  boost::system_time const timeout = boost::get_system_time() + boost::posix_time::seconds(5);

  state_change_cond.timed_wait(lock,timeout);

  ...

} while(!done);
或者在本例中,如果5秒钟内没有信号发生,那么线程将自行唤醒


请注意,条件变量需要通过互斥锁进行锁定。这是为了保证线程以原子方式被唤醒,并且它将像线程间隐式信令一样在互斥部分中正确运行。

尝试一个条件变量。“Wait”和“block”几乎是同义词。一个线程怎么可能在没有阻塞的情况下等待?“等待工作完成”和“不能阻止调用线程”听起来像是相互排斥的条件。我正在寻找一种方法,我有一些工作必须在一个线程上连续完成。我必须等待一个线程完成,然后在没有启动新线程的情况下启动新线程Casey,我不理解你的意思根本不需要。这毫无意义。
state_change_cond.notify_all();