我想知道是否有一種很好的方法可以在一段時間後終止用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