在*nix系统中创建线程安全的定时队列(C语言)

4

我的程序的一部分创建了某种消息,然后在第二部分中对这些消息进行处理。

我需要在程序的各个部分之间建立一种定时队列,可以在内存中保留消息X秒。只要该定时队列存在,X就不会改变。

理想情况下,它应该是这样的:

tqueue_t *tqueue_new(int seconds);
int tqueue_push(tqueue_t *queue, void *msg);
void *tqueue_pop(tqueue_t *queue);

tqueue_pop() 应该在队列中第一个消息等待X秒后阻塞并返回。

如何最好地实现这一点?也许已经有一些现成的解决方案了吗?

语言:C

操作系统:*nix

此外,该队列应该能够在多线程环境中工作。


也许您可以使用GLib事件循环和定时回调功能? - Sven Marnach
1个回答

2
您应该能够在POSIX消息队列的基础上构建它,并让它处理大部分细节。类似于:
(1) 写入带有时间戳字段的队列
(2) 在另一个线程中,阻塞mq_receive()直到收到消息(或使用mq_notify()来为您信号或创建线程)。
(3) 读取队列并检查时间戳。
(4) 计算等待的时间差,并使用select()或一些睡眠/计时器机制。
(5) 处理消息。

谢谢。接收消息并等待是非常聪明的。 - Marko Kevac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接