signal_sample.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-08-24 yangjie the first version
  9. */
  10. /*
  11. * 程序清单:信号例程
  12. *
  13. * 这个例子会创建一个线程,线程安装信号,然后给这个线程发送信号。
  14. *
  15. */
  16. #include <rtthread.h>
  17. #define THREAD_PRIORITY 25
  18. #define THREAD_STACK_SIZE 512
  19. #define THREAD_TIMESLICE 5
  20. static rt_thread_t tid1 = RT_NULL;
  21. /* 线程1的信号处理函数 */
  22. void thread1_signal_handler(int sig)
  23. {
  24. rt_kprintf("thread1 received signal %d\n", sig);
  25. }
  26. /* 线程1的入口函数 */
  27. static void thread1_entry(void *parameter)
  28. {
  29. int cnt = 0;
  30. /* 安装信号 */
  31. rt_signal_install(SIGUSR1, thread1_signal_handler);
  32. rt_signal_unmask(SIGUSR1);
  33. /* 运行10次 */
  34. while (cnt < 10)
  35. {
  36. /* 线程1采用低优先级运行,一直打印计数值 */
  37. rt_kprintf("thread1 count : %d\n", cnt);
  38. cnt++;
  39. rt_thread_mdelay(100);
  40. }
  41. }
  42. /* 信号示例的初始化 */
  43. int signal_sample(void)
  44. {
  45. /* 创建线程1 */
  46. tid1 = rt_thread_create("thread1",
  47. thread1_entry, RT_NULL,
  48. THREAD_STACK_SIZE,
  49. THREAD_PRIORITY, THREAD_TIMESLICE);
  50. if (tid1 != RT_NULL)
  51. rt_thread_startup(tid1);
  52. rt_thread_mdelay(300);
  53. /* 发送信号 SIGUSR1 给线程1 */
  54. rt_thread_kill(tid1, SIGUSR1);
  55. return 0;
  56. }
  57. /* 导出到 msh 命令列表中 */
  58. MSH_CMD_EXPORT(signal_sample, signal sample);