condition_variables.qbk

来自「Boost provides free peer-reviewed portab」· QBK 代码 · 共 514 行 · 第 1/2 页

QBK
514
字号
function exits with an exception.]][[Returns:] [`false` if the call is returning because the time period specifiedby `rel_time` has elapsed, `true` otherwise.]][[Postcondition:] [`lock` is locked by the current thread.]][[Throws:] [__thread_resource_error__ if an erroroccurs. __thread_interrupted__ if the wait was interrupted by a call to__interrupt__ on the __thread__ object associated with the current thread of execution.]]][note The duration overload of timed_wait is difficult to use correctly. The overload taking a predicate should be preferred in most cases.][endsect][section:timed_wait_predicate `template<typename predicate_type> bool timed_wait(boost::unique_lock<boost::mutex>& lock, boost::system_time const& abs_time, predicate_type pred)`][variablelist[[Effects:] [As-if ``while(!pred()){    if(!timed_wait(lock,abs_time))    {        return pred();    }}return true;``]]][endsect][endsect][section:condition_variable_any Class `condition_variable_any`]    #include <boost/thread/condition_variable.hpp>    namespace boost    {        class condition_variable_any        {        public:            condition_variable_any();            ~condition_variable_any();            void notify_one();            void notify_all();            template<typename lock_type>            void wait(lock_type& lock);            template<typename lock_type,typename predicate_type>            void wait(lock_type& lock,predicate_type predicate);            template<typename lock_type>            bool timed_wait(lock_type& lock,boost::system_time const& abs_time);            template<typename lock_type,typename duration_type>            bool timed_wait(lock_type& lock,duration_type const& rel_time);            template<typename lock_type,typename predicate_type>            bool timed_wait(lock_type& lock,boost::system_time const& abs_time,predicate_type predicate);            template<typename lock_type,typename duration_type,typename predicate_type>            bool timed_wait(lock_type& lock,duration_type const& rel_time,predicate_type predicate);        // backwards compatibility            template<typename lock_type>            bool timed_wait(lock_type>& lock,boost::xtime const& abs_time);            template<typename lock_type,typename predicate_type>            bool timed_wait(lock_type& lock,boost::xtime const& abs_time,predicate_type predicate);        };    }[section:constructor `condition_variable_any()`][variablelist[[Effects:] [Constructs an object of class `condition_variable_any`.]][[Throws:] [__thread_resource_error__ if an error occurs.]]][endsect][section:destructor `~condition_variable_any()`][variablelist[[Precondition:] [All threads waiting on `*this` have been notified by a call to`notify_one` or `notify_all` (though the respective calls to `wait` or`timed_wait` need not have returned).]][[Effects:] [Destroys the object.]][[Throws:] [Nothing.]]][endsect][section:notify_one `void notify_one()`][variablelist[[Effects:] [If any threads are currently __blocked__ waiting on `*this` in a callto `wait` or `timed_wait`, unblocks one of those threads.]][[Throws:] [Nothing.]]][endsect][section:notify_all `void notify_all()`][variablelist[[Effects:] [If any threads are currently __blocked__ waiting on `*this` in a callto `wait` or `timed_wait`, unblocks all of those threads.]][[Throws:] [Nothing.]]][endsect][section:wait `template<typename lock_type> void wait(lock_type& lock)`][variablelist[[Effects:] [Atomically call `lock.unlock()` and blocks the current thread. Thethread will unblock when notified by a call to `this->notify_one()` or`this->notify_all()`, or spuriously. When the thread is unblocked (for whateverreason), the lock is reacquired by invoking `lock.lock()` before the call to`wait` returns. The lock is also reacquired by invoking `lock.lock()` if thefunction exits with an exception.]][[Postcondition:] [`lock` is locked by the current thread.]][[Throws:] [__thread_resource_error__ if an erroroccurs. __thread_interrupted__ if the wait was interrupted by a call to__interrupt__ on the __thread__ object associated with the current thread of execution.]]][endsect][section:wait_predicate `template<typename lock_type,typename predicate_type> void wait(lock_type& lock, predicate_type pred)`][variablelist[[Effects:] [As-if ``while(!pred()){    wait(lock);}``]]][endsect][section:timed_wait `template<typename lock_type> bool timed_wait(lock_type& lock,boost::system_time const& abs_time)`][variablelist[[Effects:] [Atomically call `lock.unlock()` and blocks the current thread. Thethread will unblock when notified by a call to `this->notify_one()` or`this->notify_all()`, when the time as reported by `boost::get_system_time()`would be equal to or later than the specified `abs_time`, or spuriously. Whenthe thread is unblocked (for whatever reason), the lock is reacquired byinvoking `lock.lock()` before the call to `wait` returns. The lock is alsoreacquired by invoking `lock.lock()` if the function exits with an exception.]][[Returns:] [`false` if the call is returning because the time specified by`abs_time` was reached, `true` otherwise.]][[Postcondition:] [`lock` is locked by the current thread.]][[Throws:] [__thread_resource_error__ if an erroroccurs. __thread_interrupted__ if the wait was interrupted by a call to__interrupt__ on the __thread__ object associated with the current thread of execution.]]][endsect][section:timed_wait_rel `template<typename lock_type,typename duration_type> bool timed_wait(lock_type& lock,duration_type const& rel_time)`][variablelist[[Effects:] [Atomically call `lock.unlock()` and blocks the current thread. Thethread will unblock when notified by a call to `this->notify_one()` or`this->notify_all()`, after the period of time indicated by the `rel_time`argument has elapsed, or spuriously. When the thread is unblocked (for whateverreason), the lock is reacquired by invoking `lock.lock()` before the call to`wait` returns. The lock is also reacquired by invoking `lock.lock()` if thefunction exits with an exception.]][[Returns:] [`false` if the call is returning because the time period specifiedby `rel_time` has elapsed, `true` otherwise.]][[Postcondition:] [`lock` is locked by the current thread.]][[Throws:] [__thread_resource_error__ if an erroroccurs. __thread_interrupted__ if the wait was interrupted by a call to__interrupt__ on the __thread__ object associated with the current thread of execution.]]][note The duration overload of timed_wait is difficult to use correctly. The overload taking a predicate should be preferred in most cases.][endsect][section:timed_wait_predicate `template<typename lock_type,typename predicate_type> bool timed_wait(lock_type& lock, boost::system_time const& abs_time, predicate_type pred)`][variablelist[[Effects:] [As-if ``while(!pred()){    if(!timed_wait(lock,abs_time))    {        return pred();    }}return true;``]]][endsect][endsect][section:condition Typedef `condition`]    #include <boost/thread/condition.hpp>    typedef condition_variable_any condition;The typedef `condition` is provided for backwards compatibility with previous boost releases.[endsect][endsect]

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?