mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-25 17:34:05 +00:00
42 lines
838 B
C++
42 lines
838 B
C++
#include "mxticklethread.h"
|
|
|
|
#include "decomp.h"
|
|
#include "mxmisc.h"
|
|
#include "mxtimer.h"
|
|
|
|
DECOMP_SIZE_ASSERT(MxTickleThread, 0x20)
|
|
|
|
// FUNCTION: LEGO1 0x100b8bb0
|
|
MxTickleThread::MxTickleThread(MxCore* p_target, MxS32 p_frequencyMS)
|
|
{
|
|
m_target = p_target;
|
|
m_frequencyMS = p_frequencyMS;
|
|
}
|
|
|
|
// Match except for register allocation
|
|
// FUNCTION: LEGO1 0x100b8c90
|
|
MxResult MxTickleThread::Run()
|
|
{
|
|
MxTimer* timer = Timer();
|
|
MxS32 lastTickled = -m_frequencyMS;
|
|
|
|
while (IsRunning()) {
|
|
MxLong currentTime = timer->GetTime();
|
|
|
|
if (currentTime < lastTickled) {
|
|
lastTickled = -m_frequencyMS;
|
|
}
|
|
|
|
MxS32 timeRemainingMS = (m_frequencyMS - currentTime) + lastTickled;
|
|
if (timeRemainingMS <= 0) {
|
|
m_target->Tickle();
|
|
timeRemainingMS = 0;
|
|
lastTickled = currentTime;
|
|
}
|
|
|
|
Sleep(timeRemainingMS);
|
|
}
|
|
|
|
return MxThread::Run();
|
|
}
|