提交scripts
This commit is contained in:
1 parent
82caf72036
commit
07dabbd186
224 files changed
+130146
No files matched your search
@@ -0,0 +1,101 @@
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// EventQueue.cpp
|
||||
//
|
||||
// Copyright 2007 cDc@seacave
|
||||
// Distributed under the Boost Software License, Version 1.0
|
||||
// (See http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#include "Common.h"
|
||||
#include "EventQueue.h"
|
||||
|
||||
using namespace SEACAVE;
|
||||
|
||||
|
||||
// D E F I N E S ///////////////////////////////////////////////////
|
||||
|
||||
|
||||
// S T R U C T S ///////////////////////////////////////////////////
|
||||
|
||||
/*-----------------------------------------------------------*
|
||||
* EventQueue class implementation *
|
||||
*-----------------------------------------------------------*/
|
||||
|
||||
void EventQueue::Clear()
|
||||
{
|
||||
m_cs.Clear();
|
||||
m_sem.Clear();
|
||||
m_events.Empty();
|
||||
}
|
||||
|
||||
void EventQueue::AddEvent(Event* evt)
|
||||
{
|
||||
Lock l(m_cs);
|
||||
m_events.AddTail(evt);
|
||||
m_sem.Signal();
|
||||
}
|
||||
void EventQueue::AddEventFirst(Event* evt)
|
||||
{
|
||||
Lock l(m_cs);
|
||||
m_events.AddHead(evt);
|
||||
m_sem.Signal();
|
||||
}
|
||||
|
||||
Event* EventQueue::GetEvent()
|
||||
{
|
||||
m_sem.Wait();
|
||||
Lock l(m_cs);
|
||||
ASSERT(!m_events.IsEmpty());
|
||||
return m_events.RemoveHead();
|
||||
}
|
||||
Event* EventQueue::GetEvent(uint32_t millis)
|
||||
{
|
||||
if (!m_sem.Wait(millis))
|
||||
return NULL;
|
||||
Lock l(m_cs);
|
||||
if (m_events.IsEmpty())
|
||||
return NULL;
|
||||
return m_events.RemoveHead();
|
||||
}
|
||||
Event* EventQueue::GetEventLast()
|
||||
{
|
||||
m_sem.Wait();
|
||||
Lock l(m_cs);
|
||||
ASSERT(!m_events.IsEmpty());
|
||||
return m_events.RemoveTail();
|
||||
}
|
||||
Event* EventQueue::GetEventLast(uint32_t millis)
|
||||
{
|
||||
if (!m_sem.Wait(millis))
|
||||
return NULL;
|
||||
Lock l(m_cs);
|
||||
if (m_events.IsEmpty())
|
||||
return NULL;
|
||||
return m_events.RemoveTail();
|
||||
}
|
||||
/*----------------------------------------------------------------*/
|
||||
|
||||
bool EventQueue::IsEmpty() const
|
||||
{
|
||||
Lock l(m_cs);
|
||||
return m_events.IsEmpty();
|
||||
}
|
||||
|
||||
uint_t EventQueue::GetSize() const
|
||||
{
|
||||
Lock l(m_cs);
|
||||
return m_events.GetSize();
|
||||
}
|
||||
/*----------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------------------------------*
|
||||
* EventThreadPool class implementation *
|
||||
*-----------------------------------------------------------*/
|
||||
|
||||
void EventThreadPool::stop()
|
||||
{
|
||||
ThreadPool::stop();
|
||||
EventQueue::Clear();
|
||||
}
|
||||
/*----------------------------------------------------------------*/
|
||||
Reference in new issue
Block a user