only one timer at a time, usage of atomic
All checks were successful
Upload release / build (push) Successful in 33s

This commit is contained in:
Mylloon 2024-10-07 22:41:12 +02:00
parent 1f5e245541
commit cf9880281f
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 17 additions and 11 deletions

View file

@ -28,28 +28,31 @@ function script_unload()
monitor.stop_hook()
end
function check_restart()
obs.timer_remove(check_restart)
monitor.start_hook()
obs.timer_add(check_idle, idle_time * 1000)
end
function check_idle()
obs.timer_remove(check_idle)
local current_time = os.time()
local last_input_time = monitor.last_input_received()
if current_time - last_input_time >= idle_time then
monitor.stop_hook()
obs.timer_remove(check_idle)
restart_replay_buffer()
end
end
function restart_replay_buffer()
obs.obs_frontend_replay_buffer_stop()
obs.timer_add(start_replay_buffer, 2000)
obs.obs_frontend_replay_buffer_stop()
obs.timer_add(start_replay_buffer, 2000)
else
obs.timer_add(check_idle, idle_time * 1000)
end
end
function start_replay_buffer()
obs.timer_remove(start_replay_buffer)
obs.obs_frontend_replay_buffer_start()
obs.timer_add(check_restart, wait_time * 1000)
end

View file

@ -1,20 +1,23 @@
#include <stdatomic.h>
#include <time.h>
#include <windows.h>
static long long last_input_time = 0;
static atomic_llong last_input_time = 0;
HHOOK hKeyboardHook = NULL;
LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION) {
last_input_time = time(NULL);
atomic_store(&last_input_time, time(NULL));
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
__declspec(dllexport) void start_hook(void) {
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, NULL, 0);
if (!hKeyboardHook) {
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, NULL, 0);
}
}
__declspec(dllexport) void stop_hook(void) {
@ -25,5 +28,5 @@ __declspec(dllexport) void stop_hook(void) {
}
__declspec(dllexport) long long last_input_received(void) {
return last_input_time;
return atomic_load(&last_input_time);
}