gpt4 book ai didi

c++ - Boost::thread 的瞬时中断

转载 作者:行者123 更新时间:2023-11-28 03:56:03 25 4
gpt4 key购买 nike

我正在尝试实现一个程序,该程序运行的功能受固定时间限制。我已经设法用 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/

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