我尝试在C++程序中进行超时:
...
void ActThreadRun(TimeOut *tRun)
{
tRun->startRun();
}
...
void otherFunction()
{
TimeOut *tRun = new TimeOut();
std::thread t1 (ActThreadRun, tRun);
t1.join();
while(tRun->isTimeoutRUN())
{
manageCycles();
}
}
...
超时在3秒后完成,并且
tRun->isTimeoutRUN()
更改其状态。但是,如果我“
join
”线程,我就阻塞了程序,因此它等待3秒钟才能继续,所以它永远不会进入我的while循环...但是,如果我不“
join
”线程,该线程将永远不会超时,并且tRun->isTimeoutRUN()
永远不会改变,因此它将无限运行。我对线程不好,所以我向您寻求帮助,因为我不了解C++中的相关教程。
最佳答案
您可以使用新的C++ 11工具
// thread example
#include <iostream> // std::cout
#include <thread> // std::thread
void sleep()
{
std::chrono::milliseconds dura( 2000 );
std::this_thread::sleep_for( dura );//this makes this thread sleep for 2s
}
int main()
{
std::thread timer(sleep);// launches the timer
int a=2;//this dummy instruction can be executed even if the timer thread did not finish
timer.join(); // wait unil timer finishes, ie until the sleep function is done
std::cout<<"Time expired!";
return 0;
}
希望能有所帮助