1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/*
$Id: keep_alive_generic.cpp,v 1.5 2002/01/06 13:27:49 mbn Exp $
------------------------------------------------------------------------
ClanLib, the platform independent game SDK.
This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
version 2. See COPYING for details.
For a total list of contributers see CREDITS.
------------------------------------------------------------------------
*/
#include "Core/precomp.h"
#include <list>
#include "API/Core/System/keep_alive.h"
#include "API/Core/System/system.h"
#include "API/Core/System/event_listener.h"
std::list<CL_KeepAlive*> keep_alives;
CL_KeepAlive::CL_KeepAlive()
{
keep_alives.push_back(this);
}
CL_KeepAlive::~CL_KeepAlive()
{
keep_alives.remove(this);
}
void CL_System::keep_alive()
{
for (
std::list<CL_KeepAlive*>::iterator it = keep_alives.begin();
it != keep_alives.end();
it++)
{
(*it)->keep_alive();
}
}
void CL_System::keep_alive(int millis)
{
CL_EventListener events;
keep_alive(events, millis);
}
bool CL_System::keep_alive(CL_EventListener &events, int timeout)
{
// TODO: Add triggers for keep alive objects.
if (timeout == -1)
{
do CL_System::keep_alive(); while (!events.wait(10));
return true;
}
else
{
while (timeout > 0)
{
CL_System::keep_alive();
if (events.wait(timeout > 10 ? 10 : timeout)) return true;
timeout -= 10;
}
return false;
}
}
CL_Signal_v0 &CL_System::sig_quit()
{
static CL_Signal_v0 signal_quit;
return signal_quit;
}
|