BsDeferredCallManager.cpp 907 B

12345678910111213141516171819202122232425262728293031323334353637
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Utility/BsDeferredCallManager.h"
  4. namespace bs
  5. {
  6. DeferredCallManager::DeferredCallManager()
  7. {
  8. }
  9. void DeferredCallManager::queueDeferredCall(std::function<void()> func)
  10. {
  11. mCallbacks.push_back(func);
  12. }
  13. void DeferredCallManager::_update()
  14. {
  15. while(!mCallbacks.empty())
  16. {
  17. // Copy because callbacks can be queued within callbacks
  18. Vector<std::function<void()>> callbackCopy = mCallbacks;
  19. mCallbacks.clear();
  20. for(auto& call : callbackCopy)
  21. {
  22. call();
  23. }
  24. }
  25. }
  26. // Declared in BsPrerequisites.h
  27. void deferredCall(std::function<void()> callback)
  28. {
  29. DeferredCallManager::instance().queueDeferredCall(callback);
  30. }
  31. }