我的程序的一部分创建了某种消息.然后在第二部分处理这些消息.
我需要在程序的某些部分之间使用某种定时队列,这样可以将消息保存在内存中X秒.当此定时队列存在时,X不会更改.
理想情况下,这应该是这样的:
tqueue_t *tqueue_new(int seconds);
int tqueue_push(tqueue_t *queue, void *msg);
void *tqueue_pop(tqueue_t *queue);
当第一个消息在队列中持续X秒时,tqueue_pop()应该阻塞并返回.
做这个的最好方式是什么?也许有一些已有的解决方案?
语言:C
操作系统:* nix
此外,此队列应在线程环境中工作.
最佳答案 您应该能够在
POSIX Message Queues之上构建它,并让它处理大部分细节.就像是:
(1)用时间戳字段写入队列
(2)在你的另一个线程中阻止在mq_receive()阻止消息进入(或使用mq_notify()为你发信号或创建线程).
(3)读取队列并检查时间戳.
(4)计算等待和使用select()或某些睡眠/定时器机制的时间长度.
(5)处理消息.