mfc單檔案程式,使用Afxbeginthread(cwinthread*,)創建一個ui執行緒,在執行緒里面創建了一個視窗。現在主框架阻塞在繪圖函式中了,那請問這個時候執行緒中的那個視窗會被阻塞嗎?如果被阻塞了,為什么呢?怎么做到主框架阻塞在繪圖時不阻塞某個視窗回應訊息呢?
uj5u.com熱心網友回復:
主框架阻塞 , 如果是 死回圈 , 必須 kill 這個 行程。uj5u.com熱心網友回復:
什么意思?其實我就是想,主框架阻塞的時候,執行緒中的視窗不阻塞
uj5u.com熱心網友回復:
除非你AttachThreadInput或者SetParent/SetOwner了否則兩個界面執行緒不應該互相阻塞啊。uj5u.com熱心網友回復:
主框架死回圈,另一個執行緒的視窗不會阻塞嗎?
uj5u.com熱心網友回復:
子執行緒里創建視窗,在子執行緒里訊息回圈,他擁有它自己的回圈啊,和主執行緒不相干啊,不會阻塞的。uj5u.com熱心網友回復:
沒遇過執行緒里創建視窗,能改成發訊息讓主對話框去創建嗎?uj5u.com熱心網友回復:
就是因為主執行緒在忙,才開另一個執行緒創建視窗的
uj5u.com熱心網友回復:
void cdlg::onbnclickbutton1()
{
_begindthread(threadfun, 0,0);
while(1);
}
void threadfun(void* argu)
{
cwinthread* pthread = _afxbeginthread(runtime_class(cmythread));
pthread->postthreadmessage(wm_test,0,0);
while(1);
}
void cmythread::ontest(...)
{
if(ptest != null)
{
ptest = new cdlgtest;
ptest->create(...);
ptest->showwindow(....);
}
}
uj5u.com熱心網友回復:
我在下面把代碼簡單的寫了一下,能不能幫我看一下,是不是代碼思路不對?
uj5u.com熱心網友回復:
IE6就是多個主框架,每個主框架都在不同執行緒里,阻塞互不影響的。視窗之間有父子關系的話,放在不同執行緒有問題,因為擦除什么的都會互相等待,不同執行緒的視窗要獨立。
uj5u.com熱心網友回復:
你自己的界面執行緒有自己的訊息回圈,怎么會互相阻塞?不會的!除非你邏輯寫得有問題uj5u.com熱心網友回復:
子執行緒不會阻塞但不建議這么操作
應該盡量避免主執行緒阻塞
uj5u.com熱心網友回復:
邏輯,八樓有代碼哇。。。。。
uj5u.com熱心網友回復:
像八樓的代碼這樣,你看看有沒有問題
uj5u.com熱心網友回復:
指定父視窗的關鍵代碼,你就給了一段省略號……我怎么知道有沒有問題。uj5u.com熱心網友回復:
pthread->postthreadmessage(wm_test,0,0);while(1); ??
while(1) Sleep(100) ;
uj5u.com熱心網友回復:
GUI在子執行緒里曾經在初學MFC時用過,但是很可惜水平不夠,老是出問題。后來一直用的是PostThreadMessage、PostMessage來互動uj5u.com熱心網友回復:
會有點影響,但是大致可以正常運行。因為有的訊息分發,是子視窗如果不運行,會轉到父視窗運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/50093.html
標籤:界面
下一篇:MFC對話框
