diff --git a/src/component/scheduler.cpp b/src/component/scheduler.cpp index af60c4e..77e4b93 100644 --- a/src/component/scheduler.cpp +++ b/src/component/scheduler.cpp @@ -12,6 +12,7 @@ namespace scheduler namespace { utils::hook::detour server_frame_hook; + bool kill_thread = false; struct task { @@ -143,7 +144,7 @@ namespace scheduler { thread = std::thread([]() { - while (true) + while (!kill_thread) { execute(pipeline::async); std::this_thread::sleep_for(10ms); @@ -152,6 +153,16 @@ namespace scheduler server_frame_hook.create(SELECT_VALUE(0x43E340, 0x46B680), server_frame_stub); } + + void pre_destroy() override + { + kill_thread = true; + + if (thread.joinable()) + { + thread.join(); + } + } }; } diff --git a/src/dllmain.cpp b/src/dllmain.cpp index 4c4c801..3e2d6f2 100644 --- a/src/dllmain.cpp +++ b/src/dllmain.cpp @@ -13,5 +13,10 @@ BOOL APIENTRY DllMain(HMODULE /*module_*/, DWORD ul_reason_for_call, LPVOID /*re component_loader::post_unpack(); } + if (ul_reason_for_call == DLL_PROCESS_DETACH) + { + component_loader::pre_destroy(); + } + return TRUE; } \ No newline at end of file