2012-10-24 50 views
1

我有一個C++ mfc應用程序,我試圖用CMultiDocTemplate一次打開許多文檔。 我發現應用程序崩潰,只要我爲第157個文檔調用InitialUpdateFrame。 任何人都可以告訴我這個限制在哪裏嗎? 非常感謝!mfc - 一次打開多個框架

+0

您能否提供有關碰撞的更多信息?當它崩潰時,您是否在IDE中運行它,您是否可以捕獲異常或從您的應用程序獲取錯誤結果? – Tony

+0

請提供崩潰調用堆棧 – Rost

+0

我似乎找不到任何其他信息。我直接在PC上運行.exe。我知道它崩潰時,我調用CMultiDocTemplate類的InitialUpdateFrame函數 – Chris

回答

3

最可能的原因 - 您達到了Windows USER或GDI對象限制。默認情況下,進程不能創建超過10000個USER和10000個GDI對象。如果您的文檔視圖包含許多控件/圖形對象,則很容易超出限制。 157分之10000= 63

所以,如果您的文檔視圖創建63以上USER objects(窗口,圖標,光標等)或GDI objects(位圖,筆,畫筆,字體等),MFC將引發異常CResourceException,如果你不」明確地處理它,由於未處理的異常,應用程序將中止。

很容易檢查這是否是問題的真正根源。打開任務管理器,選擇Processes選項卡,在菜單View->Select columns...檢查USER ObjectsGDI Objects。運行您的應用程序並查看您的應用程序進程消耗的對象數。

看到這個優秀的文章的詳細信息:Pushing the Limits of Windows: USER and GDI Objects

+0

這就是問題所在。我從來不知道使用GDI對象的數量。非常感謝! – Chris