Shows how to use xtd::threading::timeout class.
#include <xtd/threading/interlocked>
#include <xtd/threading/thread>
#include <xtd/threading/thread_interrupted_exception>
#include <xtd/console>
#include <xtd/startup>
namespace timeout_example {
class stay_awake {
public:
stay_awake() = default;
void sleep_switch(bool value) {
sleep_switch_ = value;
}
void thread_method() {
while(!sleep_switch_) {
}
try {
"interrupted by main thread.");
}
}
private:
bool sleep_switch_ = false;
};
class thread_interrupt {
public:
static void main() {
auto stay_awake = timeout_example::stay_awake {};
auto new_thread =
thread {
thread_start {stay_awake, &timeout_example::stay_awake::thread_method}};
new_thread.interrupt();
stay_awake.sleep_switch(true);
new_thread.join();
}
};
}
startup_(timeout_example::thread_interrupt::main);