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
MxEventManager::~MxEventManager()
{
TerminateThread(TRUE);
Destroy(TRUE);
}
// OFFSET: LEGO1 0x100c0450
@ -22,6 +22,20 @@ void MxEventManager::Init()
// 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
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;
MxResult result = MxMediaManager::InitPresenters();
if (result == SUCCESS)
{
if (p_noRegister)
{
if (result == SUCCESS) {
if (p_noRegister) {
this->m_criticalSection.Enter();
locked = TRUE;
this->m_thread = new MxTickleThread(this, p_frequencyMS);
if (this->m_thread)
{
if (this->m_thread) {
if (this->m_thread->Start(0, 0) == SUCCESS)
{
status = SUCCESS;
}
}
}
else
{
else {
TickleManager()->RegisterClient(this, p_frequencyMS);
status = SUCCESS;
}
}
if (status != SUCCESS)
{
Destroy();
}
if (locked)
{
this->m_criticalSection.Leave();
}
return status;
}
// OFFSET: LEGO1 0x100c0590
void MxEventManager::Destroy()
{
Destroy(FALSE);
}

View File

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

View File

@ -98,23 +98,4 @@ void MxMediaManager::StopPresenters()
while (cursor.Next(presenter))
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
MxResult Init();
void TerminateThread(MxBool p_reinit);
protected:
MxPresenterList *m_presenters;