isle-portable/LEGO1/mxthread.h
2023-07-12 14:12:03 -07:00

58 lines
1.1 KiB
C++

#ifndef MXTHREAD_H
#define MXTHREAD_H
#include "compat.h"
#include "mxtypes.h"
#include "mxsemaphore.h"
class MxCore;
class MxThread
{
public:
// Note: Comes before virtual destructor
virtual MxResult Run();
MxResult Start(int p_stack, int p_flag);
void Terminate();
void Sleep(MxS32 p_milliseconds);
// Inferred, not in DLL
inline MxBool IsRunning() { return m_running; }
protected:
MxThread();
virtual ~MxThread();
private:
static unsigned ThreadProc(void *p_thread);
MxULong m_hThread;
MxU32 m_threadId;
MxBool m_running;
MxSemaphore m_semaphore;
};
class MxTickleThread : public MxThread
{
public:
MxTickleThread(MxCore *p_target, int p_frequencyMS);
// Unclear at this time whether this function and the m_target field are
// actually a general "userdata" pointer in the base MxThread, but it seems
// like the only usage is with an MxTickleThread.
MxResult StartWithTarget(MxCore* p_target);
// Only inlined, no offset
virtual ~MxTickleThread() {}
MxResult Run() override;
private:
MxCore *m_target;
MxS32 m_frequencyMS;
};
#endif // MXTHREAD_H