作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个程序,该程序运行的功能受固定时间限制。我已经设法用 pthreads 做到了,但我想使用 Boost::thread。到目前为止,我编写了以下代码:
#include <boost/thread.hpp>
#include <unistd.h>
#include <signal.h>
#include <iostream>
using namespace std;
boost::thread mythread;
void third_party(){
std::cout << "hello world" << std::endl;
}
void func (){
while (1){
third_party();
boost::this_thread::interruption_point();
}
}
void finish(int id){
mythread.interrupt();
}
int main (){
mythread = boost::thread(func);
signal(SIGALRM, finish);
alarm(2);
mythread.join();
return 0;
}
我设置了一个 2 秒后响起的闹钟并调用 finish
,这将中断 mythread
。问题是 func
只会在到达中断检查点后停止。在实际情况下,我想使用它,third_party
(我无权访问该代码)可能会花费大量时间,我不想等到它到达 boost::this_thread::interruption_point()
.
我想知道我是否可以使用 Boost::thread
或者更简单的方法来完成上述任务。
最佳答案
Boost 不提供立即中断的方法,但它们确实提供了获取 native 线程句柄的方法,因此如果您的 native 线程库支持立即中断,那么您仍然可以使用该方法。
查看 boost::thread::native_handle() 以访问 native 句柄。
创建您自己的线程类可能是个好主意,它提供您需要的从 boost::thread 类派生的扩展功能。
关于c++ - Boost::thread 的瞬时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604370/
我是一名优秀的程序员,十分优秀!