Интересно, есть ли хороший способ через некоторое время завершить мой процесс, написанный на С++ 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()
: будут вызваны основные деструкторы, но я бы не назвал это чистым. - person rodrigo   schedule 10.11.2015wait_for
или подобное. - person Snps   schedule 10.11.2015run
нитью. Если это не закончится вовремя, просто выполните обычный выход. Вы закроете все, что вышеrun
, правильно. Вы не контролируете вещи нижеrun
, в любом случае нет никакой надежды заставить их изящно выйти. - person n. 1.8e9-where's-my-share m.   schedule 10.11.2015