RT_Thread学习笔记_4、事件集

一、事件集

  1. 事件:唤醒线程的条件。
    1. 与信号量的区别:
      1. 信号量主要用于一对一的线程同步;当需要“一对多”,“多对一”,“多对多”时就需要事件集处理。
    2. 线程通过访问set中的标志位,结合逻辑或(独立型)、与(关联型)建立事件组合,控制线程是否要发生。
    3. 事件集控制块
      /*
       * event structure
       */
      struct rt_event
      {
          struct rt_ipc_object parent;                        /**< inherit from ipc_object */
      
          rt_uint32_t          set;                           /**< event set */
      };
      typedef struct rt_event *rt_event_t;

      通过32位无符号整形set来为事件集是否发生做标记。

    4. 事件的发送和接受
      //发送事件
      rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set);
      /**
       * This function will receive an event from event object, if the event is
       * unavailable, the thread shall wait for a specified time.
       *
       * @param event the fast event object
       * @param set the interested event set 写入对什么位置可以进行修改,
          比如 set=0x01|0x08说明调用这个API的线程对第0、3个线程感兴趣。
       * @param option the receive option, either RT_EVENT_FLAG_AND(关联型) or
       *        RT_EVENT_FLAG_OR(独立型) should be set.事件信息标记
          RT_EVENT_FLAG_CLEAR  接收完后清除事件标志
       * @param timeout the waiting time
       * @param recved the received event, if you don't care, RT_NULL can be set.
          用于保存接受到的事件。
       *
       * @return the error code
       */
      rt_err_t rt_event_recv(rt_event_t   event,
                             rt_uint32_t  set,
                             rt_uint8_t   opt,
                             rt_int32_t   timeout,
                             rt_uint32_t *recved);

       

  2. 不论是信号量、互斥量、事件集,如果take或者receive不到线程都会挂起。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值