我想知道是否有一种很好的方法可以在一段时间后终止用C++ 11编写的进程?如何干净地终止C++ 11中的进程?
以我过程我有与运行可能在通信处理被阻止主程序纯虚函数run()
一个主类。我想我的run()
函数被迫在一段时间后(即使被阻塞)和我的主类(以及成员的所有析构函数)的析构函数被完成。
现在我有一个通过回调调用std::terminate
一个计时器。
namespace Timer
{
void start(Duration time, function<void()> task)
{
thread([time, task]() {
this_thread::sleep_for(time);
task();
}).detach();
}
}
如果'run()'函数不会返回,那么不能完全结束程序。也许你可以在一个线程中运行'run()',并调用'thread :: detach()':main析构函数会被调用,但我不会称它为_clean_。 – rodrigo
我也遇到过这个问题,因为程序可能会被卡在通信中。我已经添加了心跳meachanism,所以我知道每X秒(在我的情况下,每45秒)一条消息将被接收和发送,然后在一分钟超时。所以我从来没有遇到过困扰并等待消息的情况。当然,最糟糕的情况是该程序需要45秒才能关闭,但干净了! – Nidhoegger
如果一个(未分离的)线程被阻塞,它不能在没有先解锁的情况下被正常终止。您必须通过_e.g._语法来控制这种语法,使用wait/notify或使用'wait_for'或类似方法定期检查状态。 – Snps