मैं मानक पर्यावरण यहाँ साथ टाइमर को लागू करने की कोशिश कर रहा हूँ एक कोड मैं है:टाइमर मुख्य थ्रेड लटकी हुई है
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
ऐसा लगता है कि मेरा कार्यान्वयन मुख्य धागा भी लटकता है। इससे कैसे बचें?
मैं कोई विशेषज्ञ हूँ, लेकिन मैं पर यह अजीब लगा कि आप कॉल '.Get (न पाते हैं)' [ 'std :: future'] (http://en.cppreference.com/w/cpp/धागा/भविष्य)। [जो आप करते हैं तो इच्छित परिणाम देता है।] (http://coliru.stacked-crooked.com/a/f04caae880926851) – Borgleader
वास्तव में 'get'' को कॉल करने की भी आवश्यकता नहीं है। बस 'भविष्य' को किसी चीज़ को असाइन करने की आवश्यकता है ताकि आप बाद में – user4581301
@ user4581301 ओहह कह सकें, क्योंकि अस्थायी तुरंत नष्ट हो जाता है और सीट के होने से पहले मुख्य धागे को लटका दिया जाता है? – Borgleader