mirror of
https://github.com/isledecomp/isle.git
synced 2025-12-09 23:53:02 +00:00
MxSemphore + MxThread + MxThread implementions (#80)
* Add MxSemphore + MxThread and the two implementations I could find of MxThread (consumers extend it and override the Run method). * Implement a function in MxDiskStreamProvider which uses thread and semaphore to confirm correct layout / size of those classes. * All 100% match except two functions with a pair of registers swapped.
This commit is contained in:
57
LEGO1/mxthread.h
Normal file
57
LEGO1/mxthread.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#ifndef MXTHREAD_H
|
||||
#define MXTHREAD_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
|
||||
Reference in New Issue
Block a user