- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想使用 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/
我想使用 boost::thread interrupt() 中断一个线程。我有以下代码不会抛出 boost::thread_interrupted& 异常: int myClass::myFunct
我正在尝试使用 boost 和 rtmidi 编译一个项目。但是我不断收到以下编译错误。我正在使用 linux、netbeans 7.2、boost 1.50.0 和 rtmidi 2.1.0。 g+
我是一名优秀的程序员,十分优秀!