我試圖實現定時器與標準環境 下面是一個代碼,我有:定時器掛起主線程
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;
}
至於結果,我看到在輸出5秒後:
// 5 seconds left
On Timer
main function
但希望看到:
main function
// 5 seconds left
On Timer
似乎我的實現掛起主線程以及。如何避免這種情況?
我不是專家,但我覺得很奇怪,你不會在['std :: future'](http://en.cppreference.com/w/cpp)上調用'.get()' /線程/未來)。 [如果你這樣做,就會給出預期的結果。](http://coliru.stacked-crooked.com/a/f04caae880926851) – Borgleader
甚至不需要調用'get',真的。只需要將'future'分配給某個東西,以便稍後可以調用'get' – user4581301
@ user4581301呵呵,因爲臨時會被瞬間破壞並在cout發生之前掛起主線程? – Borgleader