2011-03-18 51 views
0

我正在使用C++託管2010年在form.h文件中設計GUI。 GUI充當主卡查詢從卡的數據流。如何運行項目啓動而不需要像啓動調試模式一樣的調試?

通過使用API​​ win32(CREATETHREAD(...))調用一個函數(在ApplicationIO.cpp文件中)的按鈕被調用,其中2個線程被創建:前者用於處理數據流,後者用於用於GUI上的實時數據分析和數據監控。

該項目有兩個不同的行爲:如果它在調試模式下啓動時,它能夠更新GUI控件文本框(使用調用)和數據straming期間圖表,在啓動時不帶調試沒有數據反之出現在文本框中,和數據在圖表上顯示得非常緩慢。

有人曾經解決過類似的問題嗎?有什麼建議嗎?

回答

0

一個非常經典的錯誤是經常使用Control :: Begin/Invoke()。您將使用委託調用請求來氾濫UI線程。 UI更新通常很昂貴,您可以輕鬆進入消息循環不會執行低優先級任務的狀態。像繪畫一樣。這很容易發生,每秒調用超過一千次就是危險區域,具體取決於代理目標花費多少時間。

您可以通過以實際速率發送更新來解決此問題,這種方式利用了人眼區別它們的能力。每秒25次,更新變成模糊,更新更快只是浪費CPU週期。這給UI線程留下了很多時間來完成它需要做的事情。

當更新代價昂貴時,這可能仍然不夠慢。在這一點上,您需要跳過更新或限制工作線程。注意Invoke()自動調節,BeginInvoke()不調用。