在glib.mainloop的每一个迭代中运行一个函数



我正在写一个简单的python 3程序,该程序使用pydbus和glib。

每当在Raspberry Pi Gpio Pin上检测到边缘事件时,我都试图使用Pydbus发送信号。

为此,需要在主循环的每次迭代中调用执行此任务的功能。我已经看到timeout_add函数执行了类似的操作。但是,timeout_add仅运行我的功能每个interval毫秒。

有没有办法在每次迭代中称呼它?

使用g_idle_add()。它创建一个没有前提条件的GSource,并且优先级较低,因此其回调函数在每个主上下文迭代中执行一次,优先级比其他待处理事件较低。

如果您需要提出优先级,请类似地使用g_idle_add_full()


正如上面@nemequ所说的,架构上最好的解决方案是编写您自己的GSource实现(请参阅GSourceFuncs的文档),它的行为可能与使用g_idle_add()创建的源相同,或者可以从了解详细信息中提高性能。您正在查询的I/O PIN。这一切都取决于API,内核暴露于I/O PIN,以及如何从用户空间中进行轮询。

有关于在此处编写自定义GSource的文档。

最新更新