#pragma once #include #include #include #include #include "CResource.h" class CResourceTicket { public: CResourceTicket() = default; CResourceTicket(std::shared_ptr res); bool IsReady() const; void Join(); std::shared_ptr Get(); private: enum class CState { Loading, Synchronising, Ready, Failed }; std::atomic state { CState::Loading }; std::shared_ptr resource; std::mutex mtx; std::condition_variable cv; friend class CResourcesManager; };