|
发表于 2013-11-10 21:50:00
|
显示全部楼层
本帖最后由 electrlife 于 2013-11-10 21:51 编辑
lulu爱 发表于 2013-11-10 21:02 ![](static/image/common/back.gif)
多对象阻塞的功能每一个操作系统实现都有自己的方式,比如threadx以及windows。只要能达到相近的目标,既可 ...
本身挂起在多个内核对象这种应用不是很多,多数用在网络相关上面。
我举个例子:
比如有个下位机控制板C, 下位机显示控制设为A,PC机控制设为B
A、B都可以通过CAN控制C进行相关的动作,如果AB同时发生控制命令,
此时我需要知道谁的命令触发了动作,因为AB的权限不一样,所以如果
不知先后,我程序无法仲裁!
其实讨论这个没有意义,从我个人角度来看,知道谁是真正的触发者或许更容易接受称知为挂起在多个对象上。
对于以上的问题也不是没有办法,LZ只要稍换下思路即可:
RAW_QUEUE queue1, qeueu2, queue_gateway;
raw_queue_send_notify(&queue1, notify_queue);
raw_queue_send_notify(&queue2, notify_queue);
void notify_queue(RAW_QUEUE *ptr)
{
raw_queue_put(&queue_gateway, ptr);
}
raw_queue_receive (&queue_gateway, RAW_WAIT_FOREVER, (RAW_VOID **)&msg_gateway);
if (msg_gateway == &queue1) {
ret = raw_queue_receive (&queue1, RAW_NO_WAIT, (RAW_VOID **)&msg_app2);
if (ret == RAW_SUCCESS) {
/*Access queue1 msg*/;
}
} else if (msg_gateway == &queue2) {
ret = raw_queue_receive (&queue2, RAW_NO_WAIT, (RAW_VOID **)&msg_app2);
if (ret == RAW_SUCCESS) {
/*Access queue1 msg*/;
}
} |
|