2011-11-28 24 views
2

我嘗試構建一個連接到服務器的簡單客戶端接收數據並在gui中顯示它們。 爲此目的, - 我在其他線程上運行一個tcp客戶端(boost線程)。 - 當數據收到tcp客戶端調用回調(boost :: bind)函數,負責根據收到的數據創建動態contorol。爲什麼我在MFC中創建動態控制時鎖定了我的proram

  • 控制創建後我的主線程被鎖定?

爲什麼會發生這種情況? 只有主線程可以在MFC中構建控件?

+1

永遠不要假設任何庫是線程安全的,除非它被記錄爲這樣。這甚至適用於Windows API。 –

回答

4

Gross Generalization:在Windows應用程序中,所有控件和窗口必須在主線程中「運行」。

這意味着所有控件也必須在主線程中創建。主線程是運行Message Pump的線程。所有Windows程序都是事件驅動的,這意味着Windows消息會觸發所有功能。這些消息由一個循環接收和分派,該循環將消息從隊列中提取出來,並將它們發送給它們所針對的控件。單個窗口控件的消息全部進入同一隊列,因此窗口上的所有控件都必須通過單個線程。

+0

相關[oldnewthing](http://blogs.msdn.com/b/oldnewthing/archive/2005/10/10/479124.aspx)博客條目。 – user786653

+0

尼斯鏈接,謝謝。 –

相關問題