BsDeferredCallManager.cpp 1011 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsDeferredCallManager.h"
  5. namespace BansheeEngine
  6. {
  7. DeferredCallManager::DeferredCallManager()
  8. {
  9. }
  10. void DeferredCallManager::queueDeferredCall(std::function<void()> func)
  11. {
  12. mCallbacks.push_back(func);
  13. }
  14. void DeferredCallManager::_update()
  15. {
  16. while(!mCallbacks.empty())
  17. {
  18. // Copy because callbacks can be queued within callbacks
  19. Vector<std::function<void()>> callbackCopy = mCallbacks;
  20. mCallbacks.clear();
  21. for(auto& call : callbackCopy)
  22. {
  23. call();
  24. }
  25. }
  26. }
  27. // Declared in BsPrerequisites.h
  28. void deferredCall(std::function<void()> callback)
  29. {
  30. DeferredCallManager::instance().queueDeferredCall(callback);
  31. }
  32. }