Add wxCondition::Wait() overload that also tests the condition.

Add Wait() overload that takes a functor argument and doesn't return
until the condition is signaled _and_ the predicate returns true.  This
is useful for dealing with spurious wakeups and is modeled after C++11
std::condition_variable's corresponding method.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74771 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2013-09-06 17:09:05 +00:00
parent e549f179d1
commit ceee1c4b3b
2 changed files with 40 additions and 0 deletions

View File

@@ -169,6 +169,33 @@ public:
*/
wxCondError Wait();
/**
Waits until the condition is signalled and the associated condition true.
This is a convenience overload that may be used to ignore spurious
awakenings while waiting for a specific condition to become true.
Equivalent to
@code
while ( !predicate() )
{
wxCondError e = Wait();
if ( e != wxCOND_NO_ERROR )
return e;
}
return wxCOND_NO_ERROR;
@endcode
The predicate would typically be a C++11 lambda:
@code
condvar.Wait([]{return value == 1;});
@endcode
@since 3.0
*/
template<typename Functor>
wxCondError Wait(const Functor& predicate);
/**
Waits until the condition is signalled or the timeout has elapsed.