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 } 67