我现在正在为一个即将到来的项目设计程序结构,我被以下问题卡住了:
归结到它最重要的元素,我的程序被分成两个文件logic.py
和oscilloscope.py
。
在logic.py中,我在/dev/input/..
上初始化了一个设备,并为信号处理等设置了滤波器。在oscilloscope.py中,我使用Pygame实现了一个示波器,它应该解释/显示来自注册输入设备的输入。
现在我在logic.py
中有一个主循环,它连续地监听来自设备的输入,然后将处理过的数据转发到示波器,但我也有来自Pygame示波器实现的主循环。当从logic.py
初始化示波器时,如何防止我的程序控制流卡在Pygame主循环中,如下所示:
from oscilloscope import *
...
... #initializing filters to use, device to listen to etc.
...
self.osc = Oscilloscope(foo, bar) #creating an instance of an oscilloscope implemented with Pygame
self.osc.main() #calling the main loop of the oscilloscope. This handles all the drawing and updating screen.
#usually the flow would stop here as it is stuck in the Pygame main loop
#I need it to not get stuck so I can call the second main loop.
self.main() #captures and processes data from /dev/input/... sends processed data to the Pygame oscilloscope to draw it.
由于没有任何实际的代码,我希望注释澄清我想做什么
这样如何:(我知道我的建议可能只是理论上的):
从self.main()
循环调用self.osc.main()
循环。要做到这一点,您必须编辑self.osc.main()
函数,使其不会永远运行,而是只运行一次。保持self.main()
循环不变,每个循环调用一次self.osc.main()
。
而不是你现在正在做的事情:
def main(): #This is the self.osc.main() function
while True: #run forever
doSomething()
def main(): #This is the self.main() function
while True: #also run forever
doSomethingElse()
你可以这样做:
def main(): #This is the self.osc.main() function
doSomething() #notice I removed the loop. It only runs once. This is because the looping is handled by the other main() function (the one you call self.main())
def main(): #This is the self.main() function
while True: #also run forever
self.osc.main() #since we have now changed the self.osc.main() loop to run only once
doSomethingElse()