#pragma once #include #include "lua-helpers.h" namespace effil { // Lua this thread API std::string threadId(); void yield(); void sleep(const sol::optional&, const sol::optional&); class ThreadHandle; class Thread { public: Thread(const std::string& path, const std::string& cpath, bool managed, unsigned int step, const sol::function& function, const sol::variadic_args& args); static void getUserType(sol::state_view& lua); std::pair status(const sol::this_state& state); std::pair wait(const sol::this_state& state, const sol::optional& duration, const sol::optional& period); StoredArray get(const sol::optional& duration, const sol::optional& period); bool cancel(const sol::this_state& state, const sol::optional& duration, const sol::optional& period); bool pause(const sol::this_state&, const sol::optional& duration, const sol::optional& period); void resume(); private: std::shared_ptr handle_; private: bool waitFor(const sol::optional& duration, const sol::optional& period); private: Thread(const Thread&) = delete; Thread& operator=(const Thread&) = delete; }; } // effil