System V Message Queue - 定时接收

时间:2010-11-05 21:20:19

标签: message-queue sysv

我正在使用System V Message Queue,它没有像POSIX MQ那样的“定时接收”功能。 但现在我需要它(这个定时接收函数。)。

有人可以问:“为什么不使用POSIX而不是Sys V?”因为在我的基准测试中,SysV MQ比POSIX MQ快+ - 20%。

现在的问题。 如何伪造Sys V MQ的“定时接收”?

我编写了一段代码,在msgrcv的循环中使用IPC_NOWAITusleep进行测试。 我觉得它很难看,所以我需要想法写一个漂亮的=]

2 个答案:

答案 0 :(得分:0)

你可以制作一个小代码,首先分叉一个睡眠时间为X的子进程。在它唤醒之后,它向父亲发送一个信号(如SIGUSR1),它会使父亲进行干扰并取消msgrcv。然后子进程就死了。但是你必须记住你需要为那个信号指定一个处理程序,因为默认的只是退出进程。

答案 1 :(得分:0)

这篇文章展示了你注意到的相同的事情,你需要循环它:   http://linuxgazette.net/issue92/hawk.html

然后它继续提出一个内核修改来解决这个问题。 YMMV,但我怀疑你不会只是为了破坏你的内核。 :)