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