我正在构建一个应用程序,在该应用程序中,我不断地从 National Instruments 设备获取数据并对其进行一些实时处理。我正在尝试将采集部分连接到 PyQt GUI,以便用户可以启动、停止和配置数据采集并查看数据。我有一类用于数据采集,一类用于 GUI。我将数据采集过程作为 GUI 中的一个线程启动:
# data acquisition class
class intensimetre():
#initialize the data acquisition
def __init__(self,app=None,l1=None,l2=None,l3=None):
#...
#start the data acquisition
def demarrer(self,fs=51200.,sensibilite0=12.2,sensibilite1=10.7, rho=1.21, espaceur=0.012, c=343):
#start the acquisition task
nidaq.DAQmxStartTask(tache)
#if i add this line it works
#raw_input(u'appuyez sur entree pour continuer')
#gui class
class GUI_acquisition(QtGui.QWidget):
def __init__(self, app=None):
super(GUI_acquisition, self).__init__()
#create the gui
#...
#create an instance of the data acquisition class
self.intensimetre=
intensimetre(app=self.app,l1=self.l1,l2=self.l2,l3=self.l3)
def demarrer(self):
#start the data acquisition in a thread
t = threading.Thread(target=self.intensimetre.demarrer)
t.start()
问题是,一旦我开始数据采集,应用程序就会崩溃。如果我在开始采集后添加 raw_input 行,那么它应该可以正常工作。但是,感觉这不是正确的方法。似乎一旦开始采集,线程返回并且采集的回调没有正确处理。知道如何解决这个问题吗?
更新
我已经用raw_input
一个无限循环轮询状态属性替换了该行:
while self.isRunning:
sleep(0.1)
当用户按下开始按钮和按下停止按钮时,我设置了isRunning
to属性。虽然这可行,但我不喜欢轮询,因为我认为它会对我的应用程序的性能产生负面影响。True
False