Fix MxEventManager

This commit is contained in:
Christian Semmler 2023-10-13 12:35:46 -04:00
parent 7d4c581bf5
commit dfea153641
4 changed files with 30 additions and 36 deletions

View File

@ -13,7 +13,7 @@ MxEventManager::MxEventManager()
// OFFSET: LEGO1 0x100c03f0 // OFFSET: LEGO1 0x100c03f0
MxEventManager::~MxEventManager() MxEventManager::~MxEventManager()
{ {
TerminateThread(TRUE); Destroy(TRUE);
} }
// OFFSET: LEGO1 0x100c0450 // OFFSET: LEGO1 0x100c0450
@ -22,6 +22,20 @@ void MxEventManager::Init()
// This is intentionally left blank // This is intentionally left blank
} }
// OFFSET: LEGO1 0x100c0460
void MxEventManager::Destroy(MxBool p_fromDestructor)
{
if (m_thread != NULL) {
m_thread->Terminate();
delete m_thread;
}
else
TickleManager()->UnregisterClient(this);
if (!p_fromDestructor)
MxMediaManager::Destroy();
}
// OFFSET: LEGO1 0x100c04a0 // OFFSET: LEGO1 0x100c04a0
MxResult MxEventManager::CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegister) MxResult MxEventManager::CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegister)
{ {
@ -29,38 +43,34 @@ MxResult MxEventManager::CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegis
MxBool locked = FALSE; MxBool locked = FALSE;
MxResult result = MxMediaManager::InitPresenters(); MxResult result = MxMediaManager::InitPresenters();
if (result == SUCCESS) if (result == SUCCESS) {
{ if (p_noRegister) {
if (p_noRegister)
{
this->m_criticalSection.Enter(); this->m_criticalSection.Enter();
locked = TRUE; locked = TRUE;
this->m_thread = new MxTickleThread(this, p_frequencyMS); this->m_thread = new MxTickleThread(this, p_frequencyMS);
if (this->m_thread) if (this->m_thread) {
{
if (this->m_thread->Start(0, 0) == SUCCESS) if (this->m_thread->Start(0, 0) == SUCCESS)
{
status = SUCCESS; status = SUCCESS;
}
} }
} }
else else {
{
TickleManager()->RegisterClient(this, p_frequencyMS); TickleManager()->RegisterClient(this, p_frequencyMS);
status = SUCCESS; status = SUCCESS;
} }
} }
if (status != SUCCESS) if (status != SUCCESS)
{
Destroy(); Destroy();
}
if (locked) if (locked)
{
this->m_criticalSection.Leave(); this->m_criticalSection.Leave();
}
return status; return status;
} }
// OFFSET: LEGO1 0x100c0590
void MxEventManager::Destroy()
{
Destroy(FALSE);
}

View File

@ -11,9 +11,13 @@ class MxEventManager : public MxMediaManager
public: public:
MxEventManager(); MxEventManager();
virtual ~MxEventManager() override; virtual ~MxEventManager() override;
virtual void Destroy() override; // vtable+18
virtual MxResult CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegister); // vtable+28 virtual MxResult CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegister); // vtable+28
private: private:
void Init(); void Init();
void Destroy(MxBool p_fromDestructor);
}; };
#endif // MXEVENTMANAGER_H #endif // MXEVENTMANAGER_H

View File

@ -99,22 +99,3 @@ void MxMediaManager::StopPresenters()
while (cursor.Next(presenter)) while (cursor.Next(presenter))
presenter->EndAction(); presenter->EndAction();
} }
// OFFSET: LEGO1 0x100c0460
void MxMediaManager::TerminateThread(MxBool p_reinit)
{
if(m_thread != NULL)
{
m_thread->Terminate();
delete m_thread;
}
else
{
TickleManager()->UnregisterClient(this);
}
if(!p_reinit)
{
MxMediaManager::Destroy();
}
}

View File

@ -23,7 +23,6 @@ class MxMediaManager : public MxCore
virtual void StopPresenters(); // vtable+24 virtual void StopPresenters(); // vtable+24
MxResult Init(); MxResult Init();
void TerminateThread(MxBool p_reinit);
protected: protected:
MxPresenterList *m_presenters; MxPresenterList *m_presenters;