- 论坛徽章:
- 0
|
请教老鸟:
小菜在一个线程中创建一个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编译后都如此,请问我的问题可能出在哪里? |
|