mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-24 17:04:17 +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:
@@ -2,6 +2,25 @@
|
||||
#define MXDISKSTREAMPROVIDER_H
|
||||
|
||||
#include "mxstreamprovider.h"
|
||||
#include "mxthread.h"
|
||||
#include "mxcriticalsection.h"
|
||||
|
||||
class MxDiskStreamProvider;
|
||||
|
||||
// VTABLE 0x100dd130
|
||||
class MxDiskStreamProviderThread : public MxThread
|
||||
{
|
||||
public:
|
||||
// Only inlined, no offset
|
||||
inline MxDiskStreamProviderThread()
|
||||
: MxThread()
|
||||
, m_target(NULL) {}
|
||||
|
||||
MxResult Run() override;
|
||||
|
||||
private:
|
||||
MxDiskStreamProvider *m_target;
|
||||
};
|
||||
|
||||
// VTABLE 0x100dd138
|
||||
class MxDiskStreamProvider : public MxStreamProvider
|
||||
@@ -23,6 +42,20 @@ public:
|
||||
{
|
||||
return !strcmp(name, MxDiskStreamProvider::ClassName()) || MxStreamProvider::IsA(name);
|
||||
}
|
||||
|
||||
MxResult WaitForWorkToComplete();
|
||||
|
||||
void PerformWork();
|
||||
|
||||
private:
|
||||
MxDiskStreamProviderThread m_thread;
|
||||
MxSemaphore m_busySemaphore;
|
||||
byte m_remainingWork;
|
||||
byte m_unk1;
|
||||
MxCriticalSection m_criticalSection;
|
||||
byte unk2[4];
|
||||
void* unk3;
|
||||
void *unk4;
|
||||
};
|
||||
|
||||
#endif // MXDISKSTREAMPROVIDER_H
|
||||
|
||||
Reference in New Issue
Block a user