mirror of
https://github.com/boostorg/thread.git
synced 2026-02-09 11:32:12 +00:00
73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
// Copyright (C) 2001
|
|
// Mac Murrett
|
|
//
|
|
// Permission to use, copy, modify, distribute and sell this software
|
|
// and its documentation for any purpose is hereby granted without fee,
|
|
// provided that the above copyright notice appear in all copies and
|
|
// that both that copyright notice and this permission notice appear
|
|
// in supporting documentation. Mac Murrett makes no representations
|
|
// about the suitability of this software for any purpose. It is
|
|
// provided "as is" without express or implied warranty.
|
|
//
|
|
// See http://www.boost.org for most recent version including documentation.
|
|
|
|
#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
|