Я пытаюсь реализовать программу, которая запускает функцию, ограниченную фиксированным количеством времени. Мне удалось сделать это с помощью 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
или даже с более простым способом выполнения упомянутой задачи.