fork download
  1. #include<iostream>
  2. #include<string>
  3. #include<thread>
  4. #include<mutex>
  5.  
  6. class ThreadWrapper
  7. {
  8. ThreadWrapper()
  9. {
  10. start();
  11. }
  12.  
  13.  
  14. void start()
  15. {
  16. //init SDL here
  17.  
  18. _thread = std::thread([&]() { run(); });
  19. }
  20.  
  21. void stop()
  22. {
  23.  
  24. //signal thread to stop
  25.  
  26. _thread.join();
  27.  
  28. //you can deinit SDL here
  29. }
  30. public:
  31. ~ThreadWrapper()
  32. {
  33. stop();
  34. }
  35.  
  36.  
  37. static auto& instance()
  38. {
  39. std::lock_guard<std::mutex> lock(_instance_mutex);
  40. if (!_instance)
  41. _instance.reset(new ThreadWrapper);
  42. return *_instance;
  43. }
  44.  
  45. static void initialize()
  46. {
  47. instance();
  48. }
  49. static void deinitialize()
  50. {
  51. std::lock_guard<std::mutex> lock(_instance_mutex);
  52. _instance.reset();
  53. }
  54.  
  55. protected:
  56. void run()
  57. {
  58.  
  59. }
  60.  
  61. std::thread _thread;
  62.  
  63. static std::unique_ptr<ThreadWrapper> _instance;
  64. static std::mutex _instance_mutex;
  65. };
  66.  
  67. std::unique_ptr<ThreadWrapper> ThreadWrapper::_instance;
  68. std::mutex ThreadWrapper::_instance_mutex;
  69.  
  70. int main()
  71. {
  72. ThreadWrapper::initialize();
  73. ThreadWrapper::deinitialize();
  74. ThreadWrapper::deinitialize();
  75.  
  76. ThreadWrapper::initialize();
  77. ThreadWrapper::deinitialize();
  78.  
  79.  
  80.  
  81. ThreadWrapper::deinitialize();
  82. return 0;
  83. }
  84.  
  85.  
Success #stdin #stdout 0s 11648KB
stdin
Standard input is empty
stdout
Standard output is empty