免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2651 | 回复: 6
打印 上一主题 下一主题

怎样实现任务的抢占处理、中断??消息队列。。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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;
}

论坛徽章:
0
2 [报告]
发表于 2008-08-09 19:32 |只看该作者
关注中。
没有这样做过,我一般设置不同的队列,根据优先级访问。但是没有这样转过去处理。

提个建议,你试试行不行。
设置一个信号处理函数,当有紧急消息出现时候,发出这样的信号,程序转向这个信号处理函数,在这个信号处理函数中处理紧急消息。这样就停止了当前的消息处理,转而对紧急消息进行处理。

论坛徽章:
0
3 [报告]
发表于 2008-08-11 17:15 |只看该作者
用信号中断了普通消息的处理,然后进行紧急消息处理,在紧急消息处理中,我放弃了原来的普遍消息,待紧急消息处理完之后,又回到普通消息的处理状态,等待普通消息的到来,这个怎么实现啊??
谢谢。

论坛徽章:
0
4 [报告]
发表于 2008-08-11 17:22 |只看该作者
中断加优先级的方法

论坛徽章:
0
5 [报告]
发表于 2008-08-14 09:56 |只看该作者
能说得详细些吗?
谢谢。

论坛徽章:
0
6 [报告]
发表于 2008-08-14 10:44 |只看该作者
为什么你收到紧急的消息时不直接处理了?

论坛徽章:
0
7 [报告]
发表于 2008-08-14 11:06 |只看该作者
设置优先级,或者多队列
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP