Текущая идея у меня следующая: https://godbolt.org/ z/73rsnqozW
Код: Выделить всё
std::binary_semaphore P_SEM{0};
void signal_handler(int signal) {
P_SEM.release();
}
using namespace std::chrono_literals;
int main() {
std::atomic shutdown(false);
std::mutex cv_m;
std::condition_variable cv;
std::signal(SIGINT, signal_handler);
std::signal(SIGTERM, signal_handler);
auto termination_handler = [&shutdown, &cv]() {
P_SEM.acquire();
shutdown.store(true);
cv.notify_all();
};
auto t_termination_handler = std::async(std::launch::async, termination_handler);
do {
//work polling-loop
//do work here every 20 seconds
std::unique_lock lk(cv_m);
cv.wait_for(lk, 20s);
} while(!shutdown);
return 0;
}
Ура и спасибо
Подробнее здесь: https://stackoverflow.com/questions/787 ... -on-signal
Мобильная версия