我想在Vala中创建一个守护进程,每隔X秒执行一次任务。 我想知道哪种方式最好:
我不希望它在什么都不做的时候吃太多资源..
答案 0 :(得分:6)
如果您在系统调用中花费时间,那么从性能角度来看,不会有任何明显差异。也就是说,使用MainLoop方法可能有两个原因:
您将需要设置信号处理程序,以便您的守护程序在给予SIGTERM时可以立即死亡。如果您通过quit
通过SIGTERM
绑定Posix.signal
来调用主循环上的{{1}},那么可能会比检查睡眠成功更可读代码。
如果您决定增加复杂性,MainLoop将使其更加直接。
答案 1 :(得分:0)
您可以通过以下方式使用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,因为它在后台运行,应优先考虑其他任务。