如下創建執行緒,
DWORD threadId_encode = 0;
HANDLE hthrd_encode = NULL;
decode_thread_flag = TRUE;
hthrd_encode = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_stream,(LPVOID)this,0,&threadId_encode);
if (hthrd_encode == NULL)
{
printf("create thread failed \n");
}
CloseHandle(hthrd_encode);
//
SetTimer(1,2000,NULL);
然后執行緒里面執行while(1),回圈里面非阻塞的方式接受UDP包。
問題來了,此時點擊主界面對話框的任意位置或按鈕,界面都會卡死,顯示無回應狀態,為什么?
uj5u.com熱心網友回復:
UDP的話可以通過多種SOCKET模式來處理,select啊,event啊,基于MFC的csocket啊,你可以讀取資料以后拋到執行緒里面處理,除了select,一般都有通知訊息給你去讀取資料的。你可以弄個sleep(100)之類的看下,還會卡么?
uj5u.com熱心網友回復:
暫時來說只測驗了sleep,是沒有作用的
uj5u.com熱心網友回復:
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspxuj5u.com熱心網友回復:
單從描述感覺沒有問題,執行緒中有發送訊息之類的操作,或者執行緒有操作界面uj5u.com熱心網友回復:
貼代碼 Thread_streamuj5u.com熱心網友回復:
執行緒里面不要While(1)uj5u.com熱心網友回復:
看看你的執行緒執行代碼,是不是沒有Sleep()一直持續占用CPU資源,導致主執行緒的沒有獲取到執行,導致主界面卡住uj5u.com熱心網友回復:
+1
uj5u.com熱心網友回復:
你執行緒函式中是如何寫的?uj5u.com熱心網友回復:
Thread_stream中具體代碼,估計是recvfrom失敗后沒有Sleepuj5u.com熱心網友回復:
只有看了你的全部代碼, 才能知道錯在哪里.一般界面卡死, 肯定是在UI執行緒做了耗時操作, 或者有阻塞函式 在UI執行緒執行了.
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
你的MFC可能,被這個執行緒阻塞了uj5u.com熱心網友回復:
全部代碼+1轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/79678.html
標籤:界面
