1

在我的程序中,它启动了一个 boost 线程并将处理程序作为主线程的成员。当用户按下取消按钮时,我需要检查启动的线程是否仍在运行,如果它正在运行,则需要终止该特定线程。这是伪代码。

作弊线程

int i =1;
boost::thread m_uploadThread = boost::thread(uploadFileThread,i);

这是用于检查线程是否仍在运行但它不工作的方法

boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(2);
if (this->uploadThread.timed_join(timeout)){
 //Here it should kill the thread
}
4

2 回答 2

4

返回值 true 表示线程在调用超时之前完成。看起来你想要的是

if(!this->uploadThread.timed_join(timeout))
于 2013-03-27T02:21:37.817 回答
2

要停止您的线程,您可以使用:

my_thread.interrupt();

为了使它工作,您必须在您希望线程功能在您中断时停止的点设置一个中断点。

注意:它自己的中断不会停止线程它只是设置一个标志并且当到达中断点时线程被中断。如果没有找到中断点,则线程不会停止。

您还boost::thread_interrupted可以根据线程是否被中断来处理中断的异常。

例如,假设下一个代码在线程函数内:

try
{
    //... some important code here
    boost::this_thread.interruption_poit(); // Setting interrutption point.
}
catch(boost::thread_interrupted&)
{
    // Now you do what ever you want to do when 
    // the thread is interrupted.
}
于 2014-07-14T16:01:45.273 回答