%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 188.40.95.74 / Your IP : 216.73.216.142 Web Server : Apache System : Linux cp01.striminghost.net 3.10.0-1160.119.1.el7.tuxcare.els13.x86_64 #1 SMP Fri Nov 22 06:29:45 UTC 2024 x86_64 User : vlasotin ( 1054) PHP Version : 5.6.40 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /opt/cpanel/ea-ruby27/src/passenger-release-6.0.23/test/oxt/ |
Upload File : |
#ifndef _COUNTER_HPP_ #define _COUNTER_HPP_ #include <boost/shared_ptr.hpp> #include <boost/thread.hpp> #include <boost/thread/thread_time.hpp> struct Counter; typedef boost::shared_ptr<Counter> CounterPtr; /** * A synchronization mechanism with counter-like properties. * * To avoid memory corruption when unit tests fail, one should * never store Counter objects on the stack. Instead, one should * create them on the heap and use CounterPtr smart pointers. */ struct Counter { struct timeout_expired { }; unsigned int value; boost::mutex mutex; boost::condition_variable cond; static CounterPtr create_ptr() { return CounterPtr(new Counter()); } Counter() { value = 0; } /** * Wait until other threads have increment this counter to at least wanted_value. * If this doesn't happen within <tt>timeout</tt> miliseconds, then a timeout_expired * exception will be thrown. */ void wait_until(unsigned int wanted_value, unsigned int timeout = 1000) { boost::unique_lock<boost::mutex> l(mutex); while (value < wanted_value) { if (!cond.timed_wait(l, boost::get_system_time() + boost::posix_time::milliseconds(timeout))) { throw timeout_expired(); } } } /** Increment the counter by one. */ void increment() { boost::unique_lock<boost::mutex> l(mutex); value++; cond.notify_all(); } }; #endif /* _COUNTER_HPP_ */