Mercurial
comparison third_party/libuv/docs/code/signal/main.c @ 160:948de3f54cea
[ThirdParty] Added libuv
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Wed, 14 Jan 2026 19:39:52 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 159:05cf9467a1c3 | 160:948de3f54cea |
|---|---|
| 1 #include <stdio.h> | |
| 2 #include <stdlib.h> | |
| 3 #include <unistd.h> | |
| 4 #include <uv.h> | |
| 5 | |
| 6 uv_loop_t* create_loop() | |
| 7 { | |
| 8 uv_loop_t *loop = malloc(sizeof(uv_loop_t)); | |
| 9 if (loop) { | |
| 10 uv_loop_init(loop); | |
| 11 } | |
| 12 return loop; | |
| 13 } | |
| 14 | |
| 15 void signal_handler(uv_signal_t *handle, int signum) | |
| 16 { | |
| 17 printf("Signal received: %d\n", signum); | |
| 18 uv_signal_stop(handle); | |
| 19 } | |
| 20 | |
| 21 // two signal handlers in one loop | |
| 22 void thread1_worker(void *userp) | |
| 23 { | |
| 24 uv_loop_t *loop1 = create_loop(); | |
| 25 | |
| 26 uv_signal_t sig1a, sig1b; | |
| 27 uv_signal_init(loop1, &sig1a); | |
| 28 uv_signal_start(&sig1a, signal_handler, SIGUSR1); | |
| 29 | |
| 30 uv_signal_init(loop1, &sig1b); | |
| 31 uv_signal_start(&sig1b, signal_handler, SIGUSR1); | |
| 32 | |
| 33 uv_run(loop1, UV_RUN_DEFAULT); | |
| 34 } | |
| 35 | |
| 36 // two signal handlers, each in its own loop | |
| 37 void thread2_worker(void *userp) | |
| 38 { | |
| 39 uv_loop_t *loop2 = create_loop(); | |
| 40 uv_loop_t *loop3 = create_loop(); | |
| 41 | |
| 42 uv_signal_t sig2; | |
| 43 uv_signal_init(loop2, &sig2); | |
| 44 uv_signal_start(&sig2, signal_handler, SIGUSR1); | |
| 45 | |
| 46 uv_signal_t sig3; | |
| 47 uv_signal_init(loop3, &sig3); | |
| 48 uv_signal_start(&sig3, signal_handler, SIGUSR1); | |
| 49 | |
| 50 while (uv_run(loop2, UV_RUN_NOWAIT) || uv_run(loop3, UV_RUN_NOWAIT)) { | |
| 51 } | |
| 52 } | |
| 53 | |
| 54 int main() | |
| 55 { | |
| 56 printf("PID %d\n", getpid()); | |
| 57 | |
| 58 uv_thread_t thread1, thread2; | |
| 59 | |
| 60 uv_thread_create(&thread1, thread1_worker, 0); | |
| 61 uv_thread_create(&thread2, thread2_worker, 0); | |
| 62 | |
| 63 uv_thread_join(&thread1); | |
| 64 uv_thread_join(&thread2); | |
| 65 return 0; | |
| 66 } |