Próbuję zaimplementować czasomierza ze standardowym środowisku Oto kod mam:timera zawiesza wątek główny
bool shutdownDetected = false;
void signal_handler(const int sigid)
{
shutdownDetected = true;
}
int main(int argc, const char * argv[])
{
signal(SIGTERM, (sig_t)signal_handler);
std::async(std::launch::async, [&]() {
std::this_thread::sleep_for(std::chrono::milliseconds{5000});
std::cout << "On TIMER!" << std::endl;
});
std::cout << "main function" << std::endl;
while (!shutdownDetected) {
}
return EXIT_SUCCESS;
}
W wyniku widzę w wyjście po 5 sekundach:
// 5 seconds left
On Timer
main function
ale chciałbym zobaczyć:
main function
// 5 seconds left
On Timer
Wygląda na to, że moja implementacja również zawiera główny wątek. Jak tego uniknąć?
Nie jestem ekspertem, ale uważam, że to dziwne, że jeszcze jej nie nazywać '.get()' '[na std :: future'] (http://en.cppreference.com/w/cpp/wątek/przyszłość). [który daje zamierzony rezultat, jeśli to robisz.] (http://coliru.stacked-crooked.com/a/f04caae880926851) – Borgleader
Nawet nie trzeba wywoływać 'get', naprawdę. Wystarczy przypisać 'future' do czegoś, aby można było nazwać' get' później – user4581301
@ user4581301 Ohhh, ponieważ tymczasowy zostaje natychmiastowo zniszczony i zawiesza główny wątek zanim zdarzy się cout? – Borgleader