DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-2008. 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. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTERPROCESS_NAMED_SEMAPHORE_HPP #define BOOST_INTERPROCESS_NAMED_SEMAPHORE_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include
#include
#include
#include
#include
#include
#if defined(BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES) #include
#else #include
#include
#include
#include
#endif //!\file //!Describes a named semaphore class for inter-process synchronization namespace boost { namespace interprocess { //!A semaphore with a global name, so it can be found from different //!processes. Allows several resource sharing patterns and efficient //!acknowledgment mechanisms. class named_semaphore { /// @cond //Non-copyable named_semaphore(); named_semaphore(const named_semaphore &); named_semaphore &operator=(const named_semaphore &); /// @endcond public: //!Creates a global semaphore with a name, and an initial count. //!If the semaphore can't be created throws interprocess_exception named_semaphore(create_only_t, const char *name, int initialCount); //!Opens or creates a global semaphore with a name, and an initial count. //!If the semaphore is created, this call is equivalent to //!named_semaphore(create_only_t, ...) //!If the semaphore is already created, this call is equivalent to //!named_semaphore(open_only_t, ... ) //!and initialCount is ignored. named_semaphore(open_or_create_t, const char *name, int initialCount); //!Opens a global semaphore with a name if that semaphore is previously. //!created. If it is not previously created this function throws //!interprocess_exception. named_semaphore(open_only_t, const char *name); //!Destroys *this and indicates that the calling process is finished using //!the resource. The destructor function will deallocate //!any system resources allocated by the system for use by this process for //!this resource. The resource can still be opened again calling //!the open constructor overload. To erase the resource from the system //!use remove(). ~named_semaphore(); //!Increments the semaphore count. If there are processes/threads blocked waiting //!for the semaphore, then one of these processes will return successfully from //!its wait function. If there is an error an interprocess_exception exception is thrown. void post(); //!Decrements the semaphore. If the semaphore value is not greater than zero, //!then the calling process/thread blocks until it can decrement the counter. //!If there is an error an interprocess_exception exception is thrown. void wait(); //!Decrements the semaphore if the semaphore's value is greater than zero //!and returns true. If the value is not greater than zero returns false. //!If there is an error an interprocess_exception exception is thrown. bool try_wait(); //!Decrements the semaphore if the semaphore's value is greater //!than zero and returns true. Otherwise, waits for the semaphore //!to the posted or the timeout expires. If the timeout expires, the //!function returns false. If the semaphore is posted the function //!returns true. If there is an error throws sem_exception bool timed_wait(const boost::posix_time::ptime &abs_time); //!Erases a named semaphore from the system. //!Returns false on error. Never throws. static bool remove(const char *name); /// @cond private: friend class detail::interprocess_tester; void dont_close_on_destruction(); #if defined(BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES) detail::named_semaphore_wrapper m_sem; #else interprocess_semaphore *semaphore() const { return static_cast
(m_shmem.get_user_address()); } detail::managed_open_or_create_impl
m_shmem; typedef detail::named_creation_functor
construct_func_t; #endif /// @endcond }; /// @cond #if defined(BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES) inline named_semaphore::named_semaphore (create_only_t, const char *name, int initialCount) : m_sem(detail::DoCreate, name, read_write, initialCount) {} inline named_semaphore::named_semaphore (open_or_create_t, const char *name, int initialCount) : m_sem(detail::DoOpenOrCreate, name, read_write, initialCount) {} inline named_semaphore::named_semaphore (open_only_t, const char *name) : m_sem(detail::DoOpen, name, read_write, 1) {} inline named_semaphore::~named_semaphore() {} inline void named_semaphore::dont_close_on_destruction() { detail::interprocess_tester::dont_close_on_destruction(m_sem); } inline void named_semaphore::wait() { m_sem.wait(); } inline void named_semaphore::post() { m_sem.post(); } inline bool named_semaphore::try_wait() { return m_sem.try_wait(); } inline bool named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) { return m_sem.timed_wait(abs_time); } inline bool named_semaphore::remove(const char *name) { return detail::named_semaphore_wrapper::remove(name); } #else inline named_semaphore::~named_semaphore() {} inline void named_semaphore::dont_close_on_destruction() { detail::interprocess_tester::dont_close_on_destruction(m_shmem); } inline named_semaphore::named_semaphore (create_only_t, const char *name, int initialCount) : m_shmem (create_only ,name ,sizeof(interprocess_semaphore) + detail::managed_open_or_create_impl
:: ManagedOpenOrCreateUserOffset ,read_write ,0 ,construct_func_t(detail::DoCreate, initialCount)) {} inline named_semaphore::named_semaphore (open_or_create_t, const char *name, int initialCount) : m_shmem (open_or_create ,name ,sizeof(interprocess_semaphore) + detail::managed_open_or_create_impl
:: ManagedOpenOrCreateUserOffset ,read_write ,0 ,construct_func_t(detail::DoOpenOrCreate, initialCount)) {} inline named_semaphore::named_semaphore (open_only_t, const char *name) : m_shmem (open_only ,name ,read_write ,0 ,construct_func_t(detail::DoOpen, 0)) {} inline void named_semaphore::post() { semaphore()->post(); } inline void named_semaphore::wait() { semaphore()->wait(); } inline bool named_semaphore::try_wait() { return semaphore()->try_wait(); } inline bool named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) { return semaphore()->timed_wait(abs_time); } inline bool named_semaphore::remove(const char *name) { return shared_memory_object::remove(name); } #endif /// @endcond } //namespace interprocess { } //namespace boost { #include
#endif //BOOST_INTERPROCESS_NAMED_SEMAPHORE_HPP
named_semaphore.hpp
Page URL
File URL
Prev
13/18
Next
Download
( 8 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.