我正在写一个简单的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
的文档。