20 #ifdef STDSCHEDULER_USE_EVENTS
27 return GetEvent() && WaitForSingleObject(GetEvent(), 0) == WAIT_OBJECT_0;
34 if (!Event.WaitFor(0))
return false;
43 int iEventCnt = 0; HANDLE hEvent;
45 for (i = 0u; i < procs.size(); i++)
48 if ( (hEvent = proc->GetEvent()) )
50 if (hEvent == STDSCHEDULER_EVENT_MESSAGE)
54 eventHandles[iEventCnt] = hEvent;
55 eventProcs[iEventCnt] = proc;
64 ret = MsgWaitForMultipleObjects(iEventCnt, eventHandles.data(),
false, dwMsec, QS_ALLINPUT);
66 ret = WaitForMultipleObjects(iEventCnt, eventHandles.data(),
false, dwMsec);
71 if (ret != WAIT_TIMEOUT)
74 int iEventNr = ret - WAIT_OBJECT_0;
77 StdSchedulerProc *pProc = iEventNr < iEventCnt ? eventProcs[iEventNr] : pMessageProc;
90 for (
size_t i_proc = 0u; i_proc < procs.size(); ++i_proc)
94 if (tProcTick <= tNow)
106 int CStdMultimediaTimerProc::iTimePeriod = 0;
109 uCriticalTimerDelay(28),
111 uCriticalTimerResolution(5),
119 timeGetDevCaps(&tc,
sizeof(tc));
121 uCriticalTimerResolution =
Clamp(uCriticalTimerResolution, tc.wPeriodMin, tc.wPeriodMax);
122 timeBeginPeriod(uCriticalTimerResolution);
130 CStdMultimediaTimerProc::~CStdMultimediaTimerProc()
134 timeKillEvent(idCriticalTimer);
139 timeEndPeriod(uCriticalTimerResolution);
143 void CStdMultimediaTimerProc::SetDelay(uint32_t iDelay)
148 timeKillEvent(idCriticalTimer);
151 uCriticalTimerDelay = iDelay;
154 idCriticalTimer=timeSetEvent(
155 uCriticalTimerDelay,uCriticalTimerResolution,
156 (LPTIMECALLBACK) Event.GetEvent(),0,TIME_PERIODIC | TIME_CALLBACK_EVENT_SET);
158 if(idCriticalTimer == 0)
159 DebugLogF(
"Creating Critical Timer failed: %d", GetLastError());
164 if (procs.size() > eventProcs.size())
166 eventProcs.resize(procs.size());
167 eventHandles.resize(procs.size()+1);
183 bool CStdMultimediaTimerProc::CheckAndReset()
185 if (!Check())
return false;
bool DebugLogF(const char *strMessage ...)
T Clamp(T bval, T lbound, T rbound)
#define CStdMultimediaTimerProc
static C4TimeMilliseconds Now()
virtual void OnError(StdSchedulerProc *)
virtual bool DoScheduleProcs(int iTimeout)
void Added(StdSchedulerProc *pProc)
void StartOnCurrentThread()
void Removing(StdSchedulerProc *pProc)
void Changed(StdSchedulerProc *pProc)
virtual C4TimeMilliseconds GetNextTick(C4TimeMilliseconds tNow)
virtual bool Execute(int iTimeout=-1, pollfd *readyfds=nullptr)=0