handle window closing in InProcessPhysicsClientSharedMemoryMainThread

This commit is contained in:
Erwin Coumans 2016-04-19 08:29:20 -07:00
parent 3a8ffebc28
commit bebe9a728b
2 changed files with 23 additions and 9 deletions

View File

@ -5,10 +5,10 @@
#include"../ExampleBrowser/InProcessExampleBrowser.h" #include"../ExampleBrowser/InProcessExampleBrowser.h"
class InProcessPhysicsClientSharedMemoryMainThread : public PhysicsClientSharedMemory class InProcessPhysicsClientSharedMemoryMainThread : public PhysicsClientSharedMemory
{ {
btInProcessExampleBrowserMainThreadInternalData* m_data; btInProcessExampleBrowserMainThreadInternalData* m_data;
public: public:
InProcessPhysicsClientSharedMemoryMainThread(int argc, char* argv[]) InProcessPhysicsClientSharedMemoryMainThread(int argc, char* argv[])
@ -37,8 +37,15 @@ public:
// return non-null if there is a status, nullptr otherwise // return non-null if there is a status, nullptr otherwise
virtual const struct SharedMemoryStatus* processServerStatus() virtual const struct SharedMemoryStatus* processServerStatus()
{ {
if (btIsExampleBrowserMainThreadTerminated(m_data))
{
PhysicsClientSharedMemory::disconnectSharedMemory();
}
btUpdateInProcessExampleBrowserMainThread(m_data); btUpdateInProcessExampleBrowserMainThread(m_data);
return PhysicsClientSharedMemory::processServerStatus(); return PhysicsClientSharedMemory::processServerStatus();
} }
virtual bool submitClientCommand(const struct SharedMemoryCommand& command) virtual bool submitClientCommand(const struct SharedMemoryCommand& command)

View File

@ -165,11 +165,18 @@ void testSharedMemory(b3PhysicsClientHandle sm)
b3SharedMemoryStatusHandle statusHandle; b3SharedMemoryStatusHandle statusHandle;
int statusType; int statusType;
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitStepSimulationCommand(sm)); if (b3CanSubmitCommand(sm))
statusType = b3GetStatusType(statusHandle); {
ASSERT_EQ(statusType, CMD_STEP_FORWARD_SIMULATION_COMPLETED); statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitStepSimulationCommand(sm));
statusType = b3GetStatusType(statusHandle);
ASSERT_EQ(statusType, CMD_STEP_FORWARD_SIMULATION_COMPLETED);
} else
{
break;
}
} }
if (b3CanSubmitCommand(sm))
{ {
b3SharedMemoryStatusHandle state = b3SubmitClientCommandAndWaitStatus(sm, b3RequestActualStateCommandInit(sm,bodyIndex)); b3SharedMemoryStatusHandle state = b3SubmitClientCommandAndWaitStatus(sm, b3RequestActualStateCommandInit(sm,bodyIndex));
@ -197,13 +204,13 @@ void testSharedMemory(b3PhysicsClientHandle sm)
sensorState.m_jointForceTorque[2]); sensorState.m_jointForceTorque[2]);
} }
}
{ {
b3SharedMemoryStatusHandle statusHandle; b3SharedMemoryStatusHandle statusHandle;
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitResetSimulationCommand(sm)); statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitResetSimulationCommand(sm));
ASSERT_EQ(b3GetStatusType(statusHandle), CMD_RESET_SIMULATION_COMPLETED); ASSERT_EQ(b3GetStatusType(statusHandle), CMD_RESET_SIMULATION_COMPLETED);
}
} }
} }