mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-24 07:06:36 +00:00
Clean up game thread in SDL version
This commit is contained in:
@@ -11,6 +11,11 @@ void GpFiber_Win32::YieldTo(IGpFiber *toFiber)
|
|||||||
SwitchToFiber(static_cast<GpFiber_Win32*>(toFiber)->m_fiber);
|
SwitchToFiber(static_cast<GpFiber_Win32*>(toFiber)->m_fiber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GpFiber_Win32::YieldToTerminal(IGpFiber *toFiber)
|
||||||
|
{
|
||||||
|
YieldTo(toFiber);
|
||||||
|
}
|
||||||
|
|
||||||
void GpFiber_Win32::Destroy()
|
void GpFiber_Win32::Destroy()
|
||||||
{
|
{
|
||||||
this->~GpFiber_Win32();
|
this->~GpFiber_Win32();
|
||||||
|
@@ -6,6 +6,7 @@ class GpFiber_Win32 final : public IGpFiber
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void YieldTo(IGpFiber *toFiber) override;
|
void YieldTo(IGpFiber *toFiber) override;
|
||||||
|
void YieldToTerminal(IGpFiber *toFiber) override;
|
||||||
void Destroy() override;
|
void Destroy() override;
|
||||||
|
|
||||||
static IGpFiber *Create(LPVOID fiber);
|
static IGpFiber *Create(LPVOID fiber);
|
||||||
|
@@ -19,6 +19,11 @@ void GpFiber_SDL::YieldTo(IGpFiber *toFiber)
|
|||||||
m_event->Wait();
|
m_event->Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GpFiber_SDL::YieldToTerminal(IGpFiber *toFiber)
|
||||||
|
{
|
||||||
|
static_cast<GpFiber_SDL*>(toFiber)->m_event->Signal();
|
||||||
|
}
|
||||||
|
|
||||||
void GpFiber_SDL::Destroy()
|
void GpFiber_SDL::Destroy()
|
||||||
{
|
{
|
||||||
delete this;
|
delete this;
|
||||||
|
@@ -16,6 +16,7 @@ public:
|
|||||||
~GpFiber_SDL();
|
~GpFiber_SDL();
|
||||||
|
|
||||||
void YieldTo(IGpFiber *fromFiber) override;
|
void YieldTo(IGpFiber *fromFiber) override;
|
||||||
|
void YieldToTerminal(IGpFiber *fromFiber) override;
|
||||||
void Destroy() override;
|
void Destroy() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -5,5 +5,6 @@
|
|||||||
struct IGpFiber
|
struct IGpFiber
|
||||||
{
|
{
|
||||||
virtual void YieldTo(IGpFiber *toFiber) = 0;
|
virtual void YieldTo(IGpFiber *toFiber) = 0;
|
||||||
|
virtual void YieldToTerminal(IGpFiber *toFiber) = 0;
|
||||||
virtual void Destroy() = 0;
|
virtual void Destroy() = 0;
|
||||||
};
|
};
|
||||||
|
@@ -141,7 +141,7 @@ void GpAppEnvironment::AppThreadFunc()
|
|||||||
GpAppInterface_Get()->ApplicationMain();
|
GpAppInterface_Get()->ApplicationMain();
|
||||||
|
|
||||||
m_applicationState = ApplicationState_Terminated;
|
m_applicationState = ApplicationState_Terminated;
|
||||||
m_applicationFiber->YieldTo(m_vosFiber);
|
m_applicationFiber->YieldToTerminal(m_vosFiber);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GpAppEnvironment::InitializeApplicationState()
|
void GpAppEnvironment::InitializeApplicationState()
|
||||||
|
Reference in New Issue
Block a user