作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我程序的一部分创建了某种消息。然后在第二部分处理这些消息。
我的程序各部分之间需要某种定时队列,可以将消息保存在内存中 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
另外,这个队列应该在线程环境中工作。
最佳答案
您应该能够在 POSIX Message Queues 之上构建它让它处理大部分细节。像这样的东西:
(1)写带有时间戳字段的队列
(2) 在您的其他线程中,要么阻塞 mq_receive()直到收到消息(或使用 mq_notify() 为您发出信号或创建线程)。
(3)读取队列,查看时间戳。
(4)计算你要等多久的时间差,用select()或者一些 sleep /定时器机制。
(5) 处理消息。
关于在 C 中为 *nix 创建线程安全的定时队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724302/
我是一名优秀的程序员,十分优秀!