1#include <stdio.h> 2#include <stdlib.h> 3#include <unistd.h> 4#include <uv.h> 5 6uv_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 15void 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 22void 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 37void 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 54int 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