我想等待一个条件一段时间。我阅读了 boost 文档,似乎最好将函数wait_for
与谓词一起使用,如此处所述。
不幸的是,这个例子对我来说并不是真的有用。我应该如何写谓词?我试图编写上面报告的代码,但 Visual Studio 编译器抱怨:c:\boost\boost\thread\win32\condition_variable.hpp(394): error C2064: term does not evaluate to a function taking 0 arguments
这是代码的一部分:
class MyClass{
boost::mutex mutex;
boost::condition_variable myCondition;
//...
void foo();
bool myPredicate();
}
void MyClass::foo(){
boost::unique_lock<boost::mutex> lock(mutex);
boost::chrono::microseconds period(25000);
// ...
boost::chrono::system_clock::time_point wakeUpTime = boost::chrono::system_clock::now() + period;
if(myCondition.wait_until(lock,wakeUpTime,MyClass::myPredicate) == true){/...}
}
bool MyClass::myPredicate(){
if(...)
return true;
else
return true;
}
wait_for
使用谓词的正确方法是什么?