无等待地从邮箱中得到一个消息, OSMboxAccept()

来源:互联网 发布:简明python教程怎么样 编辑:程序博客网 时间:2024/05/12 01:39
  1. 应用程序也可以以无等待的方式从邮箱中得到消息。这可以通过程序清单 L6.17中的OSMboxAccept()函数来实现。OSMboxAccept()函数开始也是检查事件控制块是否是由OSMboxCreate()函数建立的 [L6.17(1)]。接着,它得到邮箱中的当前内容[L6.17(2)],并判断是否有消息是可用的[L6.17(3)]。如果邮箱中有消息,就把邮箱清空[L6.17(4)],而邮箱中原来指向消息的指针被返回给OSMboxAccept()的调用函数[L6.17(5)]。OSMboxAccept()函数的调用函数必须检查该返回值是否为NULL。如果该值是NULL,说明邮箱是空的,没有可用的消息。如果该值是非NULL值,说明邮箱中有消息可用,而且该调用函数已经得到了该消息。中断服务子程序在试图得到一个消息时,应该使用OSMboxAccept()函数,而不能使用OSMboxPend()函数。  
  2. OSMboxAccept()函数的另一个用途是,用户可以用它来清空一个邮箱中现有的内容。程序清单 L6.17 无等待地从邮箱中得到消息  
  3. void *OSMboxAccept (OS_EVENT *pevent)  
  4. {  
  5.     void  *msg;  
  6.   
  7.   
  8.     OS_ENTER_CRITICAL();  
  9.     if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {          (1)  
  10.         OS_EXIT_CRITICAL();  
  11.         return ((void *)0);  
  12.     }  
  13.     msg = pevent->OSEventPtr;                                    (2)  
  14.     if (msg != (void *)0) {                                   (3)  
  15.         pevent->OSEventPtr = (void *)0;                        (4)  
  16.     }  
  17.     OS_EXIT_CRITICAL();  
  18.     return (msg);                                               (5)  

0 0
原创粉丝点击