GraphicThreadLogicThreadTutorialGameStatevoid finishFrameParallel(void){}GameStatevoid finishFrameParallel(void){}void finishFrame(void) {}MessageQueueSystemprocessIncomingMessages(){ processIncomingMessage()}GraphicsGameStatevoid update(float timeSinceLast)GraphicSystemvoid processIncomingMessage()void update( float timeSinceLast );mCurrentGameStateBaseSystemvoid beginFrameParallel(void);void update( float timeSinceLast );void finishFrameParallel(void);void finishFrame(void);GameStatevoid finishFrameParallel(void){}void finishFrame(void) {}MessageQueueSystemprocessIncomingMessages(){ processIncomingMessage()}LogicGameStatevoid update(float timeSinceLast)LogicSystemvoid processIncomingMessage()void finishFrameParallel(void);mCurrentGameStateBaseSystemvoid beginFrameParallel(void);void update( float timeSinceLast );void finishFrameParallel(void);void finishFrame(void);mainlogicThread logicSystem->beginFrameParallel(); -- logicSystem->update(cFrametime); -- logicSystem->finishFrameParallel(); -- logicSystem->finishFrame();mainrenderThreadApp graphicsSystem->beginFrameParallel(); -- graphicsSystem->update( timeSinceLast ); -- graphicsSystem->finishFrameParallel();