Boost

时间:2016-11-19 17:59:25

标签: c++ boost boost-thread

C ++的种类,甚至还有更多的推特noobie。 我已成功设法创建两个线程,基于此example,一个Worker和一个Interrupter。后者通过this_thread :: sleep_for休眠50秒,并在正确使用while!this_thread :: interruption_requested()和thread :: interrupt()的情况下中断Worker,如果他没有在那段时间内完成。所以这是一个非常好用且简单的超时机制。我的问题是如何更快地停止中断者的睡眠?我的意思是如果工人在那50秒之前完成,我做一个this_thread :: yield或this_thread :: interruption_requested(两者似乎都有效)但是Interrupter仍然睡着了,他必须等待50秒才能醒来:(

有没有办法做这个超时机制,但是如果在睡眠结束之前工作人员完成了他的工作,通知/唤醒中断器?

PS:完成所有工作后,我是否需要某种同步?

1 个答案:

答案 0 :(得分:0)

你的中断线程不应该无条件地休息50秒但是等待条件变量50秒,如果工作线程先前完成它将发出条件var并且中断器将被唤醒。您可以使用std::conditional_variable或其中一个来自同名的提升