2012-02-14 36 views
0

我知道MFC不是一個受歡迎的主題,但我正在尋找平臺的建議。有什麼辦法可以在MFC中有一個視圖的線程?

我有一個多線程的MFC應用程序,它也使用onIdle很多,我們想要在應用程序中添加一個繪圖功能PGL。當然,一旦添加,主要是因爲onIdle,情節閃爍。

所以我正在考慮有一個線的觀點的情節。但不知道如何繼續。我相信我需要爲此使用ui線程,因爲它應該會收到一些消息。我將不勝感激任何建議。

回答

2

你可能有幾件事情在這裏混了:

  1. 使用的圖形一個單獨的線程可能是一個好主意(這是很難從你的描述告訴),但很可能是不必要的。除非你的UI由於繪圖功能而變得沒有反應或遲鈍,否則不會有任何好處。

  2. 如果你的問題是閃爍,這是一個完全不同的問題,通常最好通過雙緩衝繪圖解決問題 - 繪製到內存設備上下文,然後當完成時,複製該數據(或最好只是它的更新部分)屏幕。

+0

正如我所說,閃爍是由於App類中的OnIdle例程引起的。 Stlll認爲視圖繪製的線程是不必要的? – 2012-02-15 13:12:41

+0

根據你在這裏所做的以及對其他答案的迴應,我認爲單獨的線程是不必要的,並且會增加很多複雜性,而不必解決閃爍問題。它實際上並不是導致閃爍的UpdateAllViews,它是更新引起閃爍的視圖中的繪製代碼。這是一個微妙的差異,但是一個重要的差異。如果您將視圖加倍緩衝,那麼無論您更新視頻的頻率如何,它們都不會閃爍。 – Redeye 2012-02-15 21:01:34

+0

+1指出該線程是沒有必要的。你是對的。 – 2012-02-15 21:06:44

1

把所有的東西拿出來onIdle。 onIdle ='停止處理UI消息'。那裏有斑點?

+0

OnIdle僅停止消息處理id一個OnIdle運行很長。只有消息隊列爲空時,OnIdle()纔會被執行。 – 2012-02-15 07:05:52

+0

感謝您的回答。我不能擺脫OnIdle的事情,因爲這個實時應用程序在那裏做必要的事情。但我發現在OnIdle中調用UpdateAllViews,這是閃爍的原因。 – 2012-02-15 14:12:11

0

MTMDI樣品示出了其中用戶界面 事件在一個單獨的線程處理從主 應用程序線程的MFC用戶界面線程。此示例是 單線程MDI示例的修改版本。

相關問題