main.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <uv.h>
  5. uv_loop_t* create_loop()
  6. {
  7. uv_loop_t *loop = malloc(sizeof(uv_loop_t));
  8. if (loop) {
  9. uv_loop_init(loop);
  10. }
  11. return loop;
  12. }
  13. void signal_handler(uv_signal_t *handle, int signum)
  14. {
  15. printf("Signal received: %d\n", signum);
  16. uv_signal_stop(handle);
  17. }
  18. // two signal handlers in one loop
  19. void thread1_worker(void *userp)
  20. {
  21. uv_loop_t *loop1 = create_loop();
  22. uv_signal_t sig1a, sig1b;
  23. uv_signal_init(loop1, &sig1a);
  24. uv_signal_start(&sig1a, signal_handler, SIGUSR1);
  25. uv_signal_init(loop1, &sig1b);
  26. uv_signal_start(&sig1b, signal_handler, SIGUSR1);
  27. uv_run(loop1, UV_RUN_DEFAULT);
  28. }
  29. // two signal handlers, each in its own loop
  30. void thread2_worker(void *userp)
  31. {
  32. uv_loop_t *loop2 = create_loop();
  33. uv_loop_t *loop3 = create_loop();
  34. uv_signal_t sig2;
  35. uv_signal_init(loop2, &sig2);
  36. uv_signal_start(&sig2, signal_handler, SIGUSR1);
  37. uv_signal_t sig3;
  38. uv_signal_init(loop3, &sig3);
  39. uv_signal_start(&sig3, signal_handler, SIGUSR1);
  40. while (uv_run(loop2, UV_RUN_NOWAIT) || uv_run(loop3, UV_RUN_NOWAIT)) {
  41. }
  42. }
  43. int main()
  44. {
  45. printf("PID %d\n", getpid());
  46. uv_thread_t thread1, thread2;
  47. uv_thread_create(&thread1, thread1_worker, 0);
  48. uv_thread_create(&thread2, thread2_worker, 0);
  49. uv_thread_join(&thread1);
  50. uv_thread_join(&thread2);
  51. return 0;
  52. }