我想在 Vala 中创建一个守护程序,它每 X 秒只执行一次任务。我想知道哪个是最好的方法:
- Thread.usleep() 或 Posix.sleep()
- GLib.MainLoop + GLib.Timeout
- 其他?
我不想让它在什么都不做的时候吃掉太多的资源。。
我想在 Vala 中创建一个守护程序,它每 X 秒只执行一次任务。我想知道哪个是最好的方法:
我不想让它在什么都不做的时候吃掉太多的资源。。
如果您将时间花在系统调用中,那么从性能角度来看不会有任何明显的差异。也就是说,使用 MainLoop 方法可能是有意义的,原因有两个:
您将需要设置信号处理程序,以便您的守护程序在收到 SIGTERM 时可以立即死亡。如果你通过绑定via 来调用quit
你的主循环,那可能是一段比检查睡眠是否成功更易读的代码。SIGTERM
Posix.signal
如果您决定增加复杂性,MainLoop 将使其更直接。
您可以使用GLib.Timeout.add_seconds
以下方式:
Timeout.add_seconds (5000, () => {
/* Do what you want here */
// Continue this "loop" every 5000 ms
return Source.CONTINUE;
// Or remove it
return Source.REMOVE;
}, Priority.LOW);
注意:超时设置为 Priority.LOW,因为它在后台运行,应该优先考虑其他任务。