我想平行構建在Windows窗體之上的3D體素編輯器,它使用raycaster渲染以便劃分屏幕並獲取池中的每個線程以渲染其中的一部分應該是微不足道的。Windows窗體上的多線程
問題出現在Windows窗體的線程必須以STA運行 - 我可以讓其他線程啓動並完成工作,但在等待它們完成時阻塞主線程會導致奇怪的隨機死鎖。
保持主線程暢通也是一個問題 - 例如,如果用戶使用填充工具,輸入將在渲染過程中處理,這將導致「中間」圖像(對象部分着色,例如)。在每個幀之前複製整個圖像是不可行的,因爲如果必須在每一幀中複製,卷的大小足以抵消任何性能增益。
我想知道是否有任何解決方法讓氨線程以阻止用戶的方式阻止,但不會實際阻塞,但會延遲輸入的處理直到下一幀。
如果這是不可能的,是否有更好的設計來處理這個問題?
編輯:閱讀anwsers我認爲我並不清楚raycaster實時運行,因此顯示進度對話框將不起作用。不幸的是,FPS足夠低(取決於各種因素5-40),以便幀之間的輸入產生不希望的結果。
我已經試圖實現它阻塞UI線程和使用ThreadPool的一些線程來處理,並且它工作正常,除了STA的這個問題。
你有什麼僵局嗎? – SLaks 2009-10-13 01:29:22
隨機輸入事件。單擊任務欄上最小化的應用程序通常會執行此操作 - 有時會發出Windows蜂鳴聲(即錯誤嗶聲),有時會發生崩潰。 – 2009-10-13 03:17:01