私はfind_the_question()関数によって実行されるブロッキングタスクを持っています。しかし、私はこの関数を実行するスレッドが10秒以上かかることは望ましくありません。したがって、10秒以上かかる場合は、すべてのリソースを消去してそのスレッドを閉じたいと考えています。ブーストスレッド - 割り込みを受け付ける方法
私はそのためのコードを書こうとしましたが、スレッドが10秒以上かかると、何とかfind_the_question()関数で割り込みを取得できませんでした。何が間違っているのか教えてください。
void find_the_question(std::string value)
{
//allocate x resources
try{
//do some process on resources
sleep(14);
//clean resources
}
catch(boost::thread_interrupted const&)
{
//clean resources
std::cout << "Worker thread interrupted" << std::endl;
}
}
int main()
{
boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(10000);
std::cout << "In main" << std::endl;
boost::thread t1(find_the_question, "Can you block me");
t1.interrupt();
if (t1.timed_join(timeout))
{
//finished
std::cout << "Worker thread finished" << std::endl;
}
else
{
//Not finished;
std::cout << "Worker thread not finished" << std::endl;
}
std::cout << "In main end" << std::endl;
}
出力: t1が完了するまでに10秒以上かかる場合、私は以下のコンソール出力を取得しています。
std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
のに対し、私はあなたが私が間違っているのを教えてもらえ出力
std::cout << "In main" << std::endl;
std::cout << "Worker thread interrupted" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
次期待しています。ブースト::スレッド::割り込みを()を使用して、事前
あなたが使用している 'sleep(14);'これは 'boost :: thread'からのスリープですか、それともスリープ関数ですか?割り込みは 'boost :: thread:sleep'でのみ機能するので – mkaes