2016-08-01 62 views
0

問題我有兩個IC其將連接到樹莓裨傳感器信號:如何處理這個多線程任務,與邏輯結構

  • IC1發送每2秒他的數據作爲串行電報。
  • IC2是在接收到某個控制信號後發送其數據的ADC。

我已經編寫了單獨的代碼,可以讓我從串行報文中提取測量值以及請求和接收ADC值,並且它們都可以正常工作。但是,他們阻止了我的主程序,我想同時獲得傳感器值。此外,在串行報文之間等待時,我想不斷總結ADC的輸出,並在收到報文時計算模擬數據的平均值。

此刻,我的平均值計算這樣進行:

class ADC(): 

    # [...] 

    def startAvg(self): 
     self._recording = 1 
     interrupt = threading.Thread(target=self.stopAvg()) 
     recording = threading.Thread(target=self._record()) 
     recording.start() 
     interrupt.start() 
     return self._avgs 

    def _record(self): 
     sum1 = 0 
     sum2 = 0 
     counts = 0 
     while self.recording: 
      sum1 += ADC[0] # ADC channel 0 
      sum2 += ADC[1] # ADC channel 1 
      counts += 1 
     self._avgs = [ sum1/counts, sum2/counts ] 

    def stopAvg(self): 
     time.sleep(1) 
     self._recording = 0 

我創建了一個虛擬函數,僅僅睡(stopAvg)來模擬一個串行報文的到來。後來,在我的主要課程中,應該從課外停止求平均值。但是,即使現在,在 stopAvg()完成後,_record()僅被稱爲。我的錯誤在哪裏?我已經閱讀了一些關於線程的教程,但我不知道如何將它應用於我的問題,尤其是平均。我知道它可以簡單地讓我的任務一個接一個地完成,但是我想得到平均值,以便我的信號中的峯值得到照顧。畢竟線程是正確的解決方案嗎?

我想我只是需要一個很好的建議,關於如何構造我的線程,因爲我從來沒有使用線程之前。

回答

0

,我發現我的錯誤:

interrupt = threading.Thread(target=self.stopAvg()) 
recording = threading.Thread(target=self._record()) 

目標的說法括號內爲不屬於那裏!

interrupt = threading.Thread(target=self.stopAvg) 
recording = threading.Thread(target=self._record) 

......應該是怎麼回事。