本文主要是介绍无等待地从邮箱中得到一个消息, OSMboxAccept(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 应用程序也可以以无等待的方式从邮箱中得到消息。这可以通过程序清单 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()函数。
- OSMboxAccept()函数的另一个用途是,用户可以用它来清空一个邮箱中现有的内容。程序清单 L6.17 无等待地从邮箱中得到消息
- void *OSMboxAccept (OS_EVENT *pevent)
- {
- void *msg;
- OS_ENTER_CRITICAL();
- if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)
- OS_EXIT_CRITICAL();
- return ((void *)0);
- }
- msg = pevent->OSEventPtr; (2)
- if (msg != (void *)0) { (3)
- pevent->OSEventPtr = (void *)0; (4)
- }
- OS_EXIT_CRITICAL();
- return (msg); (5)
- }
这篇关于无等待地从邮箱中得到一个消息, OSMboxAccept()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!