【发布时间】:2011-09-06 07:55:52
【问题描述】:
我有阻塞任务,它将由 find_the_question() 函数执行。但是,我不希望线程执行此函数的时间超过 10 秒。因此,如果需要超过 10 秒,我想关闭该线程并清理所有资源。
我尝试为此编写代码,但是如果线程花费超过 10 秒,我无法在 find_the_question() 函数中获得中断。你能告诉我我做错了什么吗?
void find_the_question(std::string value)
{
//allocate x resources
try{
//do some process on resources
sleep(14);
//clean resources
}
catch(boost::thread_interrupted const& )
{
//clean resources
std::cout << "Worker thread interrupted" << std::endl;
}
}
int main()
{
boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(10000);
std::cout << "In main" << std::endl;
boost::thread t1(find_the_question, "Can you block me");
t1.interrupt();
if (t1.timed_join(timeout))
{
//finished
std::cout << "Worker thread finished" << std::endl;
}
else
{
//Not finished;
std::cout << "Worker thread not finished" << std::endl;
}
std::cout << "In main end" << std::endl;
}
输出: 如果 t1 需要超过 10 秒才能完成,我将得到以下控制台输出。
std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
然而,我期待以下输出
std::cout << "In main" << std::endl;
std::cout << "Worker thread interrupted" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
你能告诉我我做错了什么吗?
提前致谢
【问题讨论】:
-
您正在使用的
sleep(14);。这是来自boost::thread的睡眠还是c 睡眠功能?因为中断只适用于boost::thread:sleep
标签: c++ interrupt boost-thread