gpt4 book ai didi

c++ - boost::this_thread::interruption_point() 不会抛出 boost::thread_interrupted& 异常

转载 作者:搜寻专家 更新时间:2023-10-31 00:34:26 29 4
gpt4 key购买 nike

我想使用 boost::thread interrupt() 中断一个线程。我有以下代码不会抛出 boost::thread_interrupted& 异常:

int myClass::myFunction (arg1, arg2) try{
//some code here
do {
boost::this_thread::interruption_point();
//some other code here
} while (counter != 20000);
}catch (boost::thread_interrupted&) {
cout << "interrupted" << endl;
}

如果我将 boost::this_thread::interruption_point() 替换为 boost::this_thread::sleep( boost::posix_time::milliseconds(150)) 异常将抛出并且中断正常工作。

有人可以解释为什么 boost::this_thread::interruption_point() 没有抛出预期的异常吗?

最佳答案

正如评论者所指出的,无法排除简单的竞争条件(很大程度上取决于您的体系结构和 CPU 上的负载)。添加显式 sleep 的事实“有助于”强调这一点。

您是否在单核系统上运行?

这是一个简单的独立示例,以防您发现自己的做法有所不同。看看这个简单的测试器:

#include <iostream> 
#include <boost/thread.hpp>

struct myClass {
int myFunction(int arg1, int arg2);
};

int myClass::myFunction (int arg1, int arg2)
{
int counter = 0;
try
{
//some code here
do {
boost::this_thread::interruption_point();
//some other code here
++counter;
} while (counter != 20000);
} catch (boost::thread_interrupted&) {
std::cout << "interrupted" << std::endl;
}
return counter;
}

void treadf() {
myClass x;
std::cout << "Returned: " << x.myFunction(1,2) << "\n";
}

int main()
{
boost::thread t(treadf);
//t.interrupt(); // UNCOMMENT THIS LINE
t.join();
}

打印

Returned: 20000

或者,如果您使用 t.interrupt()

取消注释该行
interrupted
Returned: 0

在我的 i7 系统上。见<强>Live On Coliru

关于c++ - boost::this_thread::interruption_point() 不会抛出 boost::thread_interrupted& 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26103648/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com