当前位置: 技术问答>linux和unix
如何在线程中实现这样一个函数?
来源: 互联网 发布时间:2016-06-10
本文导语: 在线程中访问一个消息队列中的消息,带有超时功能,但是不能用信号来实现,声明大概如下: int RecvFromMsq(int Msq_id/*消息队列ID*/, int msg_num/*消息ID*/, unsigned char * recv_buf,..., int timeout/*超时时间*/); 功能是从...
在线程中访问一个消息队列中的消息,带有超时功能,但是不能用信号来实现,声明大概如下:
int RecvFromMsq(int Msq_id/*消息队列ID*/, int msg_num/*消息ID*/, unsigned char * recv_buf,..., int timeout/*超时时间*/);
功能是从指定消息队列中读取一个指定消息,如果在timeout时间内没有读到,那么就超时退出。
我想了很久,如果没有信号,真的不知道如何实现,请大家教我,谢谢
int RecvFromMsq(int Msq_id/*消息队列ID*/, int msg_num/*消息ID*/, unsigned char * recv_buf,..., int timeout/*超时时间*/);
功能是从指定消息队列中读取一个指定消息,如果在timeout时间内没有读到,那么就超时退出。
我想了很久,如果没有信号,真的不知道如何实现,请大家教我,谢谢
|
其实很简单嘛,工作线程读消息之前起闹钟线程去usleep,闹钟线程被唤醒后,可以撤销工作线程,或者往消息队列写一条特殊消息,工作线程读出后就可以判断出是否超时。