返回 DeepSeek-Reasonix
hang_watchdog_darwin.go
根目录 / desktop / hang_watchdog_darwin.go
1 //go:build darwin
2
3 package main
4
5 /*
6 #include <stdint.h>
7 #include <dispatch/dispatch.h>
8
9 extern void reasonixDesktopMainHeartbeat(void);
10
11 static dispatch_source_t reasonix_main_heartbeat_timer;
12
13 static void reasonix_main_heartbeat_handler(void *ctx) {
14 reasonixDesktopMainHeartbeat();
15 }
16
17 static void reasonix_start_main_heartbeat(uint64_t interval_ms) {
18 if (reasonix_main_heartbeat_timer != NULL) {
19 return;
20 }
21 reasonix_main_heartbeat_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
22 dispatch_set_context(reasonix_main_heartbeat_timer, NULL);
23 dispatch_source_set_event_handler_f(reasonix_main_heartbeat_timer, reasonix_main_heartbeat_handler);
24 dispatch_source_set_timer(reasonix_main_heartbeat_timer, dispatch_time(DISPATCH_TIME_NOW, 0), interval_ms * NSEC_PER_MSEC, 100 * NSEC_PER_MSEC);
25 dispatch_resume(reasonix_main_heartbeat_timer);
26 }
27
28 static void reasonix_stop_main_heartbeat(void) {
29 if (reasonix_main_heartbeat_timer == NULL) {
30 return;
31 }
32 dispatch_source_cancel(reasonix_main_heartbeat_timer);
33 reasonix_main_heartbeat_timer = NULL;
34 }
35 */
36 import "C"
37
38 import "time"
39
40 func mainThreadWatchdogSupported() bool {
41 return true
42 }
43
44 func startNativeMainThreadHeartbeat(intervalMS uint64) {
45 C.reasonix_start_main_heartbeat(C.uint64_t(intervalMS))
46 }
47
48 func stopNativeMainThreadHeartbeat() {
49 C.reasonix_stop_main_heartbeat()
50 }
51
52 //export reasonixDesktopMainHeartbeat
53 func reasonixDesktopMainHeartbeat() {
54 recordMainThreadHeartbeat(time.Now())
55 }
56
56 lines GO