condition_test_common.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 98 行

HPP
98
字号
#ifndef CONDITION_TEST_COMMON_HPP#define CONDITION_TEST_COMMON_HPP// Copyright (C) 2007 Anthony Williams////  Distributed under the Boost Software License, Version 1.0. (See accompanying //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#include <boost/thread/condition_variable.hpp>#include <boost/thread/mutex.hpp>#include <boost/thread/thread_time.hpp>unsigned const timeout_seconds=5;    struct wait_for_flag{    boost::mutex mutex;    boost::condition_variable cond_var;    bool flag;    unsigned woken;            wait_for_flag():        flag(false),woken(0)    {}    struct check_flag    {        bool const& flag;                    check_flag(bool const& flag_):            flag(flag_)        {}                    bool operator()() const        {            return flag;        }    private:        void operator=(check_flag&);    };            void wait_without_predicate()    {        boost::mutex::scoped_lock lock(mutex);        while(!flag)        {            cond_var.wait(lock);        }        ++woken;    }    void wait_with_predicate()    {        boost::mutex::scoped_lock lock(mutex);        cond_var.wait(lock,check_flag(flag));        if(flag)        {            ++woken;        }    }    void timed_wait_without_predicate()    {        boost::system_time const timeout=boost::get_system_time()+boost::posix_time::seconds(timeout_seconds);                    boost::mutex::scoped_lock lock(mutex);        while(!flag)        {            if(!cond_var.timed_wait(lock,timeout))            {                return;            }        }        ++woken;    }    void timed_wait_with_predicate()    {        boost::system_time const timeout=boost::get_system_time()+boost::posix_time::seconds(timeout_seconds);        boost::mutex::scoped_lock lock(mutex);        if(cond_var.timed_wait(lock,timeout,check_flag(flag)) && flag)        {            ++woken;        }    }    void relative_timed_wait_with_predicate()    {        boost::mutex::scoped_lock lock(mutex);        if(cond_var.timed_wait(lock,boost::posix_time::seconds(timeout_seconds),check_flag(flag)) && flag)        {            ++woken;        }    }};#endif

⌨️ 快捷键说明

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