中断线程后的时间量,没有阻塞而等待

问题描述:

我想在后台启动一个线程,并希望在一段时间后停止它,如果它没有完成。主要问题是,在等待线程完成或定时器到达最后期限时,程序不应该阻塞。重要的是要保证这一点。中断线程后的时间量,没有阻塞而等待

我试过this example,但在等待timed_join时,它会阻塞。我必须宣布正在进行一些计算的警告。

void CallbackReceived() { 
    boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(500); 
    boost::thread thrd(&Foo); 

    if (thrd.timed_join(timeout)) { 
    //finished 
    } else { 
    //Not finished; 
    } 
} 

您有什么建议吗?

+3

关闭我头顶的'在等待完成之前宣布警告','有另一个后台线程负责监视第一个线程','更改第一个线程以便意识到时间限制并可以中止本身..' – forsvarir

+1

开始另一个线程,将调用'timed_join'。 –

+1

@forsvarir我会做出这个答案。 – RedX

您可以启动一个线程来启动线程并等待timed_join。

main 
| 
|---thread 
|  | 
|  |-----thread 
|    | 
|    | 
|    | 
|  join<------  
| 
| 

但是,如果你只是想要一个警告,把它放在开始线程之前。如果它是一个图形应用程序,并且您仍然想要处理事件,则必须使主线程可用,如上所示。

必须停止的线程可能会在一段时间后自行退出。例如,如果它执行循环中的所有工作,则它可以定期检查(例如,每10次迭代循环)如果最大时间已经过去并且在时间已过的情况下退出。

不时地,主线程可以检查完成作业的线程(或过早终止)并删除它们。