Condition Variables Manual
A condition variable is used to wake a waiting thread to perform some action. It is typically used together with custom threads, see 线程手册 .
A condition variable is based on maxon::ConditionVariableInterface :
A condition variable can have multiple dependencies. This means that
Set()
must be called multiple times:
A condition variable is typically used as a member variable of a custom thread:
// This example shows how a thread uses a condition variable to wait for a command.// worker maxon ::Result< void > operator ()() { while (! IsCancelled ()) { // check if condition is set, if not wait for another second const maxon::Seconds timeValue = maxon::Seconds (1); if (_condition.Wait(timeValue)) { DiagnosticOutput ( "Action" );
// clear the condition variable to wait again _condition.Clear(); } } return maxon::OK ; }
// set the condition variable to wake the thread void Action() { _condition.Set(); } const maxon::Char * GetName () const { return "ExampleThread" ; } private : maxon::ConditionVariableRef _condition; };
This example thread can be used like this:
// This example creates, starts and controls a thread with its condition variable. if (!g_exampleThread) { // create thread and call Init() g_exampleThread = ExampleThread::Create() iferr_return ; g_exampleThread->Init() iferr_return ; DiagnosticOutput ("Start thread..."); g_exampleThread.Start() iferr_return ; } if (g_exampleThread) { // wake the thread g_exampleThread->Action(); }