2012-02-28 74 views
1

我有一個應用程序通過D2XX接口將音頻數據提供給FTDI設備。它完美的工作,而我的應用程序有專注,並使用非常少的CPU(5%)。但是,當我錘擊CPU(通過切換到其他應用程序,或重型繪圖)有時我可以在音頻中產生一個口吃。.Net中的實時優先級

我嘗試了很多事情來防止這種情況(進程/線程優先級爲實時,MMCSS調度等),但它仍然有時會出現。

還有沒有其他辦法可以提高優先級,還是不寫內核驅動程序是不可能的?

+0

USB外設有多少緩衝? – 2012-02-28 20:46:19

+0

沒有辦法。您可以在內核中創建高優先級的項目,但由於不是實時內核,即使該內核不是100%保證。 – Christopher 2012-02-28 21:19:57

回答

-1

您可能要考慮使用.net 4.0的並行編程可能性。當你創建一個任務工廠並讓工作由幾個並行線程完成時,分配的CPU將會更高。

+1

我認爲問題不是吞吐量,而是延遲。而你的解決方案不會幫助延遲。 – svick 2012-02-28 20:51:36

0

如果您將進程(而不是線程)優先級設置爲「實時」,則應始終在其他線程不運行實時線程之前運行線程。所以我認爲這是你能做的最好的。

但是,只有在絕對必要時,您才應該使用實時進程優先級,因爲它可能會導致整個系統無響應。

0

提高爲設備提供服務的線程的優先級,或增加(如果可能的話)與設備通信的緩衝區大小。

Windows內部任務切換的最短時間爲10ms。如果你的線程不能及時處理來自設備的數據,你會有口吃和滴下音頻。