Is there a way to pass the wxWidget GUI to a wxThread?

I have made a game that uses a game loop. Now i am trying to implement a GUI for this game in wxWidgets.

The problem is that when I initialize the GUI the control of the program remains on a GUI loop and doesn't go to the game loop.

So, can i make the GUI run on its own thread?

Answers


You can, but leave all code, which interacts with the GUI on the main thread/EDT (Event Dispatch Thread). Concurrent access to GUI elements is not intended by design and will cause problems. Instead, put the game loop into a wxThread and fire appropriate events from there. Those events can then be handled on the EDT to update the GUI or for rendering a frame.

Another solution would be, to invoke single iterations of your game loop on the main thread, using wxTimer.

Note:

  • Throttle the game loop or coalesce the events if necessary. wxTimer does perfectly support throttling by frequency and coalescing of update events. In a separate thread, you'd need to sleep for the remaining time of the desired cycle/iteration time or wait on a semaphore, triggered by the main thread.
  • Implement access to share data like the game state with a synchronization object like wxMutex. Preferably, you could instead use std::mutex and std::thread from C++11.

Examples:


Need Your Help

How can I use transactions in my MySQL stored procedure?

mysql stored-procedures transactions

I'm trying to modify my MySQL stored procedure and make it transactional. The existing stored procedure works fine with no problem but as soon as I make it transactional it does not even allow me t...

MeteorJS Collection is not defined

javascript node.js meteor npm

superpack is an npm package that is warped using _wrapAsync. Why does inserting into the collection UserSession cause an error stating that the collection is not defined?