Chinaunix
标题:
怎样实现任务的抢占处理、中断??消息队列。。。。
[打印本页]
作者:
soqsoq
时间:
2008-08-09 15:01
标题:
怎样实现任务的抢占处理、中断??消息队列。。。。
我想用消息队列进行消息的处理,消息分为两种,一是一般的消息,二是紧急的消息,
一般的消息,必须前一个消息处理之后处理,就像下面的代码一样。
紧急的消息,在一般消息没有处理完时,取消一般消息处理,转到紧急消息处理,这个怎么实现啊??
求教高人,谢谢。
WORD32 P_GUI_Entry()
{
for (;
{
memset(g_aucDataBuf, 0, READER_MAX_RCV_MSG_LEN*sizeof(BYTE));
iRet = msgrcv(g_dwGuiMsgQid, g_aucDataBuf, READER_MAX_RCV_MSG_LEN-sizeof(long), 0, MSG_NOERROR);
if(0 > iRet)
{
/*消息队列接收出错*/
printf("msgrcv error in Gui process!\n";
break;
}
ptMsg = (T_Msg *)g_aucDataBuf;
if (ptMsg->wMsgLen > (READER_MAX_RCV_MSG_LEN - sizeof(T_Msg)))
{
/*接受到超过缓冲区长度的消息*/
continue;
}
dwRet = GUIMsgProc(g_dwState, ptMsg, g_aucDataBuf + sizeof(T_Msg));
}
return READER_SUCCESS;
}
作者:
lukeden
时间:
2008-08-09 19:32
关注中。
没有这样做过,我一般设置不同的队列,根据优先级访问。但是没有这样转过去处理。
提个建议,你试试行不行。
设置一个信号处理函数,当有紧急消息出现时候,发出这样的信号,程序转向这个信号处理函数,在这个信号处理函数中处理紧急消息。这样就停止了当前的消息处理,转而对紧急消息进行处理。
作者:
soqsoq
时间:
2008-08-11 17:15
用信号中断了普通消息的处理,然后进行紧急消息处理,在紧急消息处理中,我放弃了原来的普遍消息,待紧急消息处理完之后,又回到普通消息的处理状态,等待普通消息的到来,这个怎么实现啊??
谢谢。
作者:
net_robber
时间:
2008-08-11 17:22
中断加优先级的方法
作者:
soqsoq
时间:
2008-08-14 09:56
能说得详细些吗?
谢谢。
作者:
gawk
时间:
2008-08-14 10:44
为什么你收到紧急的消息时不直接处理了?
作者:
e_sharp
时间:
2008-08-14 11:06
设置优先级,或者多队列
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2