int main() { std::mutex MX; std::condition_variable CV; auto F1 = [&] { std::cout << "Start F1" << std::endl; try { std::unique_lock<std::mutex> UL(MX); while (true) { interruptible_wait(CV, UL); } } catch (thread_interrupted& e) { std::cout << e.what() << std::endl; } std::cout << "Endof F1" << std::endl; }; interruptible_thread T1(F1); std::thread T2([&] { std::cout << "Start F2" << std::endl; std::this_thread::sleep_for(std::chrono::milliseconds(1000)); T1.interrupt(); //std::this_thread::sleep_for(std::chrono::milliseconds(10000)); //T1.interrupt(); std::cout << "Endof F2" << std::endl; }); T1.join(); T2.join(); return 0; }
inline void sleep(system_time const& abs_time) { interruptible_wait(abs_time); }
inline void sleep(TimeDuration const& rel_time) { interruptible_wait(detail::pin_to_zero(rel_time.total_milliseconds())); }
inline void interruptible_wait(system_time const& abs_time) { interruptible_wait(detail::win32::invalid_handle_value,abs_time); }
inline void interruptible_wait(uintmax_t milliseconds) { interruptible_wait(detail::win32::invalid_handle_value,milliseconds); }
inline void sleep(TimeDuration const& rel_time) { interruptible_wait(static_cast<unsigned long>(rel_time.total_milliseconds())); }
inline void interruptible_wait(unsigned long milliseconds) { interruptible_wait(detail::win32::invalid_handle_value,milliseconds); }