我正在构建一个应用程序,我从NI设备连续获取数据并对其进行实时处理。我试图将采集部分挂钩到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
设置为True
属性,并在按下停止按钮时设置为False
。虽然这有效,但我不喜欢民意调查,因为我认为它会对我的应用程序的性能产生负面影响。