36 template<
typename TCallable,
typename ...TArgs>
37 LThread(TCallable&& Func, TArgs&&... Args)
39 Task = [Func = std::forward<TCallable>(Func), ...Args = std::forward<TArgs>(Args)]()
mutable
41 std::invoke(Func, std::move(Args)...);
51 template<
typename TCallable,
typename ...TArgs>
52 void Setup(TCallable&& Func, TArgs&&... Args)
54 Task = [Func = std::forward<TCallable>(Func), ...Args = std::forward<TArgs>(Args)]()
mutable
56 std::invoke(Func, std::move(Args)...);
60 FORCEINLINE
void Run()
62 LK_CORE_DEBUG_TAG(
"LThread",
"Invoking Run");
63 if (WorkerThread.joinable())
65 LK_CORE_ERROR_TAG(
"LThread",
"Thread is already running");
69 if (Task && Task.has_value())
71 WorkerThread = std::thread([
this]
88 FORCEINLINE FThreadHandle
GetHandle()
const {
return Handle; }
93 FORCEINLINE
bool IsRunning()
const {
return bIsRunning; }
99 template <
typename TRep,
typename TPeriod>
100 static void Sleep(
const std::chrono::duration<TRep, TPeriod> Duration)
102 std::this_thread::sleep_for(Duration);
106 FThreadHandle Handle = 0;
108 std::thread WorkerThread;
109 std::optional<std::function<void()>> Task;
111 bool bIsRunning =
false;
static void Sleep(const std::chrono::duration< TRep, TPeriod > Duration)
Sleep for a duration, inhibiting thread execution. Uses std::chrono.
Definition Thread.h:100