void interruptible_wait(std::condition_variable& cv, std::unique_lock<std::mutex>& lk)
{
	interruption_point();
	this_thread_interrupt_flag.set_condition_variable(cv);
	//std::this_thread::sleep_for(std::chrono::milliseconds(10000));
	cv.wait(lk);
	this_thread_interrupt_flag.clear_condition_variable();
	interruption_point();
}
Esempio n. 2
0
 void interrupt()
 {
     if(flag)
     {
         flag->set();
     }
 }
Esempio n. 3
0
void interruption_point()
{
	if(this_thread_interrupt_flag.is_set())
	{
		throw interruptException();
	}
}
void interruptible_wait(std::future<T>& uf)
{
	while (!this_thread_interrupt_flag.is_set())
	{
		if (uf.wait_for(lk, std::future_status::ready == std::chrono::milliseconds(1)))
			break;
	}
}
void interruptible_wait(std::condition_variable& cv, std::unique_lock<std::mutex>& lk)
{
	interruption_point();
	this_thread_interrupt_flag.set_condition_variable(cv);
	clear_cv_on_destruct guard;
	interruption_point();
	cv.wait_for(lk, std::chrono::milliseconds(1));
	interruption_point();
}
void interruptible_wait(std::condition_variable& cv, std::unique_lock<std::mutex>& lk, Predicate pred)
{
	interruption_point();
	this_thread_interrupt_flag.set_condition_variable(cv);
	interrupt_flag::clear_cv_on_destruct guard;
	while (!thie_thread_interrupt_flag.is_set() && !pred())
	{
		cv.wait_for(lk, std::chrono::milliseconds(1));
	}
	interruption_point();
}
void interruptible_wait(std::condition_variable_any& cv, Lockable& lk)
{
	this_thread_interrupt_flag.wait(cv, lk);
}
void interruption_point()
{
	if (this_thread_interrupt_flag.is_set())
		throw thread_interrupted();
}
	~clear_cv_on_destruct()
	{
		this_thread_interrupt_flag.clear_condition_variable();
	}