2
0

BsAsyncOpEx.cpp 931 B

123456789101112131415161718192021222324252627282930313233343536
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Extensions/BsAsyncOpEx.h"
  4. #include "CoreThread/BsCoreThread.h"
  5. namespace bs
  6. {
  7. AsyncOpEx::AsyncOpEx(const AsyncOp& op, const std::function<MonoObject*(const AsyncOp&)>& convertCallback)
  8. :mAsyncOp(op), mConvertCallback(convertCallback)
  9. { }
  10. bool AsyncOpEx::isComplete() const
  11. {
  12. return mAsyncOp.hasCompleted();
  13. }
  14. MonoObject* AsyncOpEx::getReturnValue() const
  15. {
  16. if (!mAsyncOp.hasCompleted())
  17. return nullptr;
  18. if (mConvertCallback == nullptr)
  19. return nullptr;
  20. return mConvertCallback(mAsyncOp);
  21. }
  22. void AsyncOpEx::blockUntilComplete() const
  23. {
  24. if (!mAsyncOp.hasCompleted())
  25. {
  26. gCoreThread().submit();
  27. mAsyncOp.blockUntilComplete();
  28. }
  29. }
  30. }