2014-01-07 53 views
-1

此應用程序通過串口加密狗通過USB串口設備進行通信。我已經能夠得到它來處理我的單個查詢沒有問題,但我有一個命令,將發送多個查詢到串行設備和在我看來,緩衝區如果越過。這裏是我的代碼部分:Thread.Sleep崩潰我的應用程序

這是我與20查詢陣列命令:

String [] stringOneArray = {":000101017d", ":0001060178", ":00010B016C", ":000110017D", 
     ":0001150178", ":00011A016C", ":00011F0167", ":0001240178", ":0001290173", 
     ":00012E0167", ":0001330178", ":0001380173", ":00013D0167", ":0001420178", 
     ":0001470173", ":00014C0167", ":0001510178", ":0001560173", ":00015B0167", ":0001600178"}; 

這是我如何使用數組:

getVelocitiesButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     ftDev.setLatencyTimer((byte) 16); 
     int z; 
     for (z = 0; z < 19; z++) { 
      String writeData = (String) stringOneArray[z]; 
      byte[] OutData = writeData.getBytes(); 
      ftDev.write(OutData, writeData.length()); 
      try { 
       Thread.sleep(50); 
      } catch (InterruptedException e) { } 
     } 
    } 
}); 

不知道代碼的其餘部分是必要的但會添加它,如果需要的話。 所以ftdev是我的串口設備。它將查詢命令發送到串行設備,它接收以字節爲單位的響應,我使用For循環來構建響應,直到所有字節(每個響應31個字節),然後我處理該響應,並在那個時候它應該接收第二個查詢直到發送最後一個命令爲止。如果我允許FOR循環僅發送一個或兩個查詢,但使用大量的數組索引並且它崩潰,那麼這很好。圖我只是放慢FOR循環,並添加thread.sleep,但它凍結了應用程序和崩潰......什麼給了?有沒有其他方法來控制命令發送的速度?我儘可能儘快地發送它們,但恐怕我不太瞭解java。這是迄今爲止我在完成這個個人項目方面的主要墊腳石,一直困擾着爲期2天的研究和嘗試解決方案。

+0

如果問題可以通過暫停輸出來解決,那麼您只需要將工作放在後臺線程中即可。您在'onClick'中所做的所有工作都會「凍結」應用。 –

+0

請發佈您的相關日誌條目。 – dcow

回答

1

看起來好像你睡了~1000毫秒(因爲你的上一次操作沒有發送到串行設備,所以確切地說950是950)以及通過串行連接執行寫操作所需的時間。無論如何,這是相當長的一段時間。卸下了Thread.sleep(50)看漲和看跌的的onClick的全部內容複製到下面的代碼的運行方法:

AsyncTask.execute(new Runnable { 
    @Override 
    public void run() { 
     // talk to device here 
    } 
}); 

然後,問不同的問題有關的快速寫入崩潰的連接。

+0

這固定我的問題,儘可能gui不凍結。它仍然會崩潰應用程序。我使用了thread.sleep,只要我保持在350,並且不會降低,它就會運行「很好」,但我有這種感覺,你正在引導我找到更好的解決方案。我一直在閱讀ftdi串行芯片的api文檔,但是我沒有看到我怎麼能控制芯片上的I/O而不丟失數據......也許更多的閱讀是下一個,除非有人能更好地告訴我......謝謝大衛... – Nandy

+0

@Nandy我帶領你的是要求一個關於你的ftdi串行芯片IO的單獨問題。你在這裏提出了兩個關於你的問題的問題,我選擇首先回答簡單問題。你應該接受這個答案,如果它解決了最初的問題,然後通過「問題問題」跟進另一個問題,因爲現在情況不同了(應用程序不會因UI凍結而崩潰,它由於串行通信而崩潰)。然後人們可以更容易和直接地幫助你解決這個問題。而且,是的,我認爲你將來有一些閱讀(= – dcow

+0

@Nandy也注意到你只發送了20條命令中的19條到設備 – dcow