named_condition_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 153 行
CPP
153 行
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2004-2007. 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)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/sync/named_condition.hpp>#include <boost/interprocess/sync/named_mutex.hpp>#include <boost/interprocess/sync/scoped_lock.hpp>#include <boost/date_time/posix_time/posix_time_types.hpp>#include <boost/lexical_cast.hpp>#include "condition_test_template.hpp"#include "named_creation_template.hpp"#include <string>#include "get_process_id_name.hpp"using namespace boost::interprocess;struct condition_deleter{ std::string name; ~condition_deleter() { if(name.empty()) named_condition::remove(test::add_to_process_id_name("named_condition")); else named_condition::remove(name.c_str()); }};//This wrapper is necessary to have a default constructor//in generic mutex_test_template functionsclass named_condition_test_wrapper : public condition_deleter, public named_condition{ public: named_condition_test_wrapper() : named_condition(open_or_create, (test::add_to_process_id_name("test_cond") + boost::lexical_cast<std::string>(count)).c_str()) { condition_deleter::name += test::add_to_process_id_name("test_cond"); condition_deleter::name += boost::lexical_cast<std::string>(count); ++count; } ~named_condition_test_wrapper() { --count; } static int count;};int named_condition_test_wrapper::count = 0;//This wrapper is necessary to have a common constructor//in generic named_creation_template functionsclass named_condition_creation_test_wrapper : public condition_deleter, public named_condition{ public: named_condition_creation_test_wrapper(create_only_t) : named_condition(create_only, test::add_to_process_id_name("named_condition")) { ++count_; } named_condition_creation_test_wrapper(open_only_t) : named_condition(open_only, test::add_to_process_id_name("named_condition")) { ++count_; } named_condition_creation_test_wrapper(open_or_create_t) : named_condition(open_or_create, test::add_to_process_id_name("named_condition")) { ++count_; } ~named_condition_creation_test_wrapper() { if(--count_){ detail::interprocess_tester:: dont_close_on_destruction(static_cast<named_condition&>(*this)); } } static int count_;};int named_condition_creation_test_wrapper::count_ = 0;struct mutex_deleter{ std::string name; ~mutex_deleter() { if(name.empty()) named_mutex::remove(test::add_to_process_id_name("named_mutex")); else named_mutex::remove(name.c_str()); }};//This wrapper is necessary to have a default constructor//in generic mutex_test_template functionsclass named_mutex_test_wrapper : public mutex_deleter, public named_mutex{ public: named_mutex_test_wrapper() : named_mutex(open_or_create, (test::add_to_process_id_name("test_mutex") + boost::lexical_cast<std::string>(count)).c_str()) { mutex_deleter::name += test::add_to_process_id_name("test_mutex"); mutex_deleter::name += boost::lexical_cast<std::string>(count); ++count; } ~named_mutex_test_wrapper() { --count; } static int count;};int named_mutex_test_wrapper::count = 0;int main (){ try{ //Remove previous mutexes and conditions named_mutex::remove(test::add_to_process_id_name("test_mutex0")); named_condition::remove(test::add_to_process_id_name("test_cond0")); named_condition::remove(test::add_to_process_id_name("test_cond1")); named_condition::remove(test::add_to_process_id_name("named_condition")); named_mutex::remove(test::add_to_process_id_name("named_mutex")); test::test_named_creation<named_condition_creation_test_wrapper>(); test::do_test_condition<named_condition_test_wrapper ,named_mutex_test_wrapper>(); } catch(std::exception &ex){ std::cout << ex.what() << std::endl; return 1; } named_mutex::remove(test::add_to_process_id_name("test_mutex0")); named_condition::remove(test::add_to_process_id_name("test_cond0")); named_condition::remove(test::add_to_process_id_name("test_cond1")); named_condition::remove(test::add_to_process_id_name("named_condition")); named_mutex::remove(test::add_to_process_id_name("named_mutex")); return 0;}#include <boost/interprocess/detail/config_end.hpp>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?