我的問題可能並不是真正的實時處理,但可能會再次。如何正確使用實時優先
我的應用程序有幾個比GUI更重要的線程,但是我希望GUI至少可以使用。我不希望它在任何時候都被鎖定,而且我確實希望更新屏幕給出我正在執行的處理結果。
目前我所有的基本項目都是在不同的線程中分離的,我調用一個委託給我的GUI來顯示結果。
我的GUI可以正常工作,但是如果我更改標籤頁或者最小化/最大化它,已經知道阻止我的其他線程在他們不能在0.1s的時間限制內執行操作。
這是我在做什麼打電話給我的委託:
delegate void FuncDelegate(ResultContainer Result);
FuncDelegate DelegatedDisplay= new FuncDelegate(DisplayResults);
//then later on
Invoke(DelegatedDisplay, Result);
我的大部分關鍵過程是在連續循環運行,從拉動和推動各種緩衝區(的ArrayList和正常列表)線程。
我的一個關鍵線程的啓動每次使用:
Thread mythread = new Thread(new ThreadStart(ProcessResults));
mythread.Start();
我想這樣做的原因,而不是隻具有在循環中運行一個線程,從名單拉,是我想也許我沒有時間的原因是我有一個輪詢循環,我擔心會佔用太多的資源(儘管每當輪詢結果爲負時我都使用Thread.Sleep(5))。
每次我需要併發進程花費我寶貴的時間,是否啓動新線程?這應該是一個循環?我的循環被責備?
我可以給一個線程比其他更高的優先級,還是使用Thread.Sleep我唯一的選擇?如果我確實分配了更高的線程優先級,我怎麼能確定其他線程能夠存活?
爲什麼簡單的表單事件會非常阻礙我的其他線程?有沒有辦法給我的GUI線程分配更少的資源?如果其他線程的時鐘用完了,我可以以某種方式使用Thread.Sleep來阻止表單事件嗎?
對於我所有令人沮喪的問題都有一個答案,是否有某種線程分析器可以用來幫助確定我的問題?我嘗試使用「管理堆棧資源管理器」,但不知何故,並不總是顯示我的應用程序有什麼線程。
任何關於此事的幫助都會對我有很大的幫助。
你解決了這個問題嗎?我想我遇到過類似的事情,開啓 - 關閉 - 繪製窗口(即使通過其他進程)以某種方式拖延實時優先級線程。 –
@EugeneRyabtsev不,這不是真的「解決」。我正在使用「BeginInvoke」和「線程池」。也沒有做出重大改進。在關鍵事件處理完成之後,直接在關鍵線索的某些部分進行睡眠有所幫助。所做的就是釋放不太重要的線程實際處理的週期時間。我發現如果一個不太關鍵的線程需要等待太久,它最終會影響更高優先級的線程。 –