0

我正在构建一个应用程序,在该应用程序中,我不断地从 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)

当用户按下开始按钮和按下停止按钮时,我设置了isRunningto属性。虽然这可行,但我不喜欢轮询,因为我认为它会对我的应用程序的性能产生负面影响。TrueFalse

4

0 回答 0