發個難題,大家討論一下,看怎么能破?
1.父視窗在主行程的某一執行緒中
2.子視窗在子行程的某一執行緒中
子視窗所在執行緒接收命令后,進入死回圈,父視窗也跟著死了
如何處理子視窗卡死而不讓主視窗也跟著卡死?或者怎么處理子視窗卡死讓主視窗能夠復活?
uj5u.com熱心網友回復:
解除父子關系,你走你的陽關道,我過我的獨木橋其實我是瞎掰的,坐等高手回復,學習
uj5u.com熱心網友回復:
不同行程應該不會卡死,除非你父視窗在等待子視窗什么訊息,因為子視窗卡死,所以父視窗一直在等待uj5u.com熱心網友回復:
是要解除父子關系,還要解除執行緒的輸入佇列,我試過的,關系可以正常解除,可是主視窗的仍然會卡死,比如主視窗的最大化按鈕就會無回應,怎么能徹底解除關系呢?uj5u.com熱心網友回復:
oyljerry 你好,能和你探討一下嗎?uj5u.com熱心網友回復:
查MSDN是Windows程式員必須掌握的技能之一。http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
uj5u.com熱心網友回復:
zhao4zhong1能說下解決辦法嗎?uj5u.com熱心網友回復:
沒這樣玩過。自己感覺不同的行程訊息回圈不一樣,應該是不會卡死的。
uj5u.com熱心網友回復:
這個問題應該歸結到LZ是如何讓子視窗卡死了的這個問題上吧uj5u.com熱心網友回復:
我覺得應該把問題的重點放在解決子視窗卡死上吧。這種一環套一環的,你不解決子視窗,而去解決父視窗的問題。本來程式錯誤就是會傳遞的。uj5u.com熱心網友回復:
先解決死回圈,因為有的死回圈會搶走所有的機時變成獨占,從而造成系統死機。正常的死回圈是可釋放資源的,此時不在同一執行緒的主程式應該不會發生死機,否則說明程式存在嚴重錯誤。uj5u.com熱心網友回復:
如果主視窗和子視窗沒有邏輯依賴關系,那么由于他們在不同的執行緒,并且他們都有自己的訊息回圈,按道理說應該不會子視窗卡死能影響主視窗的情況。除非是二者有邏輯依賴關系,如:主視窗呼叫子視窗函式,而在子視窗函式中死回圈了,導致主視窗也根著卡了。其他情況不可能。即使是依賴子視窗訊息或事件也不會導致主視窗卡死。uj5u.com熱心網友回復:
父子之間是不是有互操作?uj5u.com熱心網友回復:
父子視窗并沒有互相操作,理論上解開父子關系后就應該不會卡死了,可事實證明的確還是有問題,而且我用MFC寫了一個簡單的Demo驗證了此問題,這是一個技術難題,目前IE瀏覽器就做到了,IE瀏覽器的主界面和頁面區視窗就在不同的執行緒中,當頁面卡死的時候,主界面仍然復活了,IE就是徹底解開了視窗父子關系,上面有人說應該解決子視窗卡死的問題,這是不需要解決的,我拋出這個問題就是想解決子視窗卡死的時候讓主視窗復活,目前仍然沒有人能給我正確的答案uj5u.com熱心網友回復:
父子視窗并沒有互相操作,理論上解開父子關系后就應該不會卡死了,可事實證明的確還是有問題,而且我用MFC寫了一個簡單的Demo驗證了此問題,這是一個技術難題,目前IE瀏覽器就做到了,IE瀏覽器的主界面和頁面區視窗就在不同的執行緒中,當頁面卡死的時候,主界面仍然復活了,IE就是徹底解開了視窗父子關系,上面有人說應該解決子視窗卡死的問題,這是不需要解決的,我拋出這個問題就是想解決子視窗卡死的時候讓主視窗復活,目前仍然沒有人能給我正確的答案uj5u.com熱心網友回復:
我也在研究這個問題,目前IE跟QQ瀏覽器都做到了,不知道過了這么久,樓主是否已經解決?uj5u.com熱心網友回復:
1.父視窗在主行程的某一執行緒中2.子視窗在子行程的某一執行緒中//是由子視窗執行緒創建的?按照樓主的描述肯定不是由子執行緒創建的
子視窗所在執行緒接收命令后,進入死回圈,父視窗也跟著死了//如果子視窗是子執行緒創建的,主執行緒是不會卡死的
如何處理子視窗卡死而不讓主視窗也跟著卡死?或者怎么處理子視窗卡死讓主視窗能夠復活?
更多 0 分
uj5u.com熱心網友回復:
建議:不要在主視窗的OnCreate或者其它地方創建子視窗
子視窗應該有執行緒函式創建
uj5u.com熱心網友回復:
Mark 遇到相同的問題uj5u.com熱心網友回復:
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspxuj5u.com熱心網友回復:
我也是。子行程崩潰不影響父行程。子行程卡死父行程也卡死
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/96783.html
標籤:進程/線程/DLL
上一篇:VS2010/VS2015 Date Time Picker空間相關例外問題
下一篇:error C2678: binary '==' : no operator defined which takes a left-hand operand
