mirror of
https://github.com/boostorg/thread.git
synced 2026-02-09 11:32:12 +00:00
67 lines
1.3 KiB
C++
67 lines
1.3 KiB
C++
// (C) Copyright Mac Murrett 2001.
|
|
// Use, modification and distribution are subject to 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 for most recent version.
|
|
|
|
#include "delivery_man.hpp"
|
|
|
|
#include "os.hpp"
|
|
#include "execution_context.hpp"
|
|
|
|
|
|
namespace boost {
|
|
|
|
namespace threads {
|
|
|
|
namespace mac {
|
|
|
|
namespace detail {
|
|
|
|
|
|
delivery_man::delivery_man():
|
|
m_pPackage(NULL),
|
|
m_pSemaphore(kInvalidID),
|
|
m_bPackageWaiting(false)
|
|
{
|
|
assert(at_st());
|
|
|
|
OSStatus lStatus = MPCreateSemaphore(1UL, 0UL, &m_pSemaphore);
|
|
// TODO - throw on error here
|
|
assert(lStatus == noErr);
|
|
}
|
|
|
|
delivery_man::~delivery_man()
|
|
{
|
|
assert(m_bPackageWaiting == false);
|
|
|
|
OSStatus lStatus = MPDeleteSemaphore(m_pSemaphore);
|
|
assert(lStatus == noErr);
|
|
}
|
|
|
|
|
|
void delivery_man::accept_deliveries()
|
|
{
|
|
if(m_bPackageWaiting)
|
|
{
|
|
assert(m_pPackage != NULL);
|
|
m_pPackage->accept();
|
|
m_pPackage = NULL;
|
|
m_bPackageWaiting = false;
|
|
|
|
// signal to the thread making the call that we're done
|
|
OSStatus lStatus = MPSignalSemaphore(m_pSemaphore);
|
|
assert(lStatus == noErr);
|
|
}
|
|
}
|
|
|
|
|
|
} // namespace detail
|
|
|
|
} // namespace mac
|
|
|
|
} // namespace threads
|
|
|
|
} // namespace boost
|