#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() {
console::write_line("new_thread is executing thread_method.");
while(!sleep_switch_) {
thread::spin_wait(10000000);
}
try {
console::write_line("new_thread going to sleep.");
thread::sleep(timeout::infinite);
console::write_line("new_thread cannot go to sleep - "
"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}};
thread::sleep(10);
new_thread.interrupt();
console::write_line("main thread calls interrupt on new_thread.");
stay_awake.sleep_switch(true);
new_thread.join();
}
};
}
startup_(timeout_example::thread_interrupt::main);
The exception that is thrown when a Thread is interrupted while it is in a waiting state.
Definition thread_interrupted_exception.hpp:25
Creates and controls a thread, sets its priority, and gets its status.
Definition thread.hpp:43
void start()
Causes the operating system to change the state of the current instance to xtd::threading::thread_sta...
#define startup_(main_method)
Defines the entry point to be called when the application loads. Generally this is set either to the ...
Definition startup.hpp:175
delegate< void()> thread_start
Represents the method that executes on a xtd::threading::thread.
Definition thread_start.hpp:24
The xtd::threading namespace provides classes and interfaces that enable multithreaded programming....
Definition abandoned_mutex_exception.hpp:11
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10