免费注册 查看新帖 |

Chinaunix

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

请教关于posix消息队列无法设置阻塞超时的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-09 10:20 |只看该作者 |倒序浏览
请教老鸟:

小菜在一个线程中创建一个posix消息队列,用mq_timedreceive来阻塞接收,发现在消息队列空的时候,并没有等待超时时间到达,而是立即返回。
不知道小菜在哪里出了问题,还望老鸟给于指教。
RHEL AS5.1  内核版本2.6.18

代码如下:

消息队列创建:
  struct mq_attr         newattr;
  mq_unlink("/mqLcd");
   newattr.mq_maxmsg = 10;
   newattr.mq_curmsgs =  0;
   newattr.mq_msgsize = sizeof(STRU_LCDMSG);

    if(ERROR == (msgQIdLcd = mq_open("/mqLcd", O_RDWR|O_CREAT, 0x777, &newattr)))
    {
        PDBG_L0("LCD消息队列创建错误!\n");
        perror("<errno>");
        return;
    }

接收消息队列如下:

  struct timespec tmout;
   tmout.tv_sec = 6;
   

   if(ERROR != (rcvlen = mq_timedreceive(msgQIdLcd, (char*)&struLcdMsgTmp, sizeof(STRU_LCDMSG), (unsigned *)NULL, (const struct timespec *)&tmout)))
   //if(ERROR != (rcvlen = mq_receive(msgQIdLcd, (char*)&struLcdMsgTmp, sizeof(STRU_LCDMSG), (unsigned *)NULL)))
   {
         printf("receive a data, len = %d\n", rcvlen);
   }
   else
  {
         printf("rcv timeout\n");
         perror("<error>");
         printf("errno = %d\n", errno);
}


小菜偶发现用mq_receive可以正常阻塞,但用mq_timedreceive或mq_timedsend就会立即返回,用gcc或arm-linux-gcc编译后都如此,请问我的问题可能出在哪里?

论坛徽章:
0
2 [报告]
发表于 2009-01-09 16:22 |只看该作者
希望大大们能够不吝指教,这个问题困惑小弟有段时间了,多谢了

论坛徽章:
0
3 [报告]
发表于 2009-01-12 08:44 |只看该作者
没有人用过么

论坛徽章:
0
4 [报告]
发表于 2010-10-26 16:21 |只看该作者
快两年了,也没有人回复,还是自己回复吧,以防有跟偶一样遇到这个问题的小菜搜到这篇帖子。

linux中的mq_timedreceive需要用“绝对时间”来阻塞,也就是说,如果你要阻塞一秒,需要先取得系统时间,再在系统时间上加一秒,把得到的结果做为mq_timedreceive的参加设回去就OK啦

论坛徽章:
0
5 [报告]
发表于 2010-10-26 17:20 |只看该作者
orz……

论坛徽章:
0
6 [报告]
发表于 2018-11-23 13:01 |只看该作者
thanks,orz。。。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
7 [报告]
发表于 2018-11-23 22:49 |只看该作者
支持楼主挖坟。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP