急!!!!!为什么在多线程环境中,我的无模式对话框不响应消息呢,界面一动不动? 我在主线程里创建了一个子线程,然后子线程在适当的时候,会回调(callback)主线程中的代码去显示一个无模式对话框,当该无模式对话框show出来之后,然后界面就没反应了所以我怀疑系统发给无模式对话框的消息是否被子线程给截获了?如果是,请问有何解决方法呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么叫做主线程代码?就算回调这个对话框也是属于子线程的,所以没有反应也是正常的Post主线程一个消息,然后在主线程相应这个消息然后创建对话框 void CThreadTest1Dlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 //OnOK(); m_dwThreadID=0; m_hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE )Thread1,this,0,&m_dwThreadID); //WaitForSingleObject(hthread,INFINITE);}UINT CThreadTest1Dlg::Thread1(LPVOID pParam){ CThreadTest1Dlg *pdlg=(CThreadTest1Dlg*)pParam; //无模式对话框弹出后,此线程被堵塞了,因为MessageBox在关闭前不返回,虽然主界面对话框和消息框可以前后切换,但子线程被堵塞,不会更新edit更新秒时 //::MessageBox(NULL,"TEST",NULL,MB_OK); //投递一个自定义消息,自定义消息响应弹出一个无模式对话框,不等待直接返回,主界面的Edit继续显示秒时走动。 ::PostMessage(pdlg->GetSafeHwnd(),WM_MSGBOX,NULL,NULL); while(1) { CString str=CTime::GetCurrentTime().Format("%m:%S")+"\r\n"; pdlg->m_Edit.SetWindowText(str); //cout << str << endl; Sleep(500); }}LRESULT CThreadTest1Dlg::OnMsgBox(WPARAM wParam,LPARAM lParam){ //自定义消息响应函数,弹出一个非模式对话框 ::MessageBox(NULL,"TEST",NULL,MB_OK); return 0;}void CThreadTest1Dlg::OnBnClickedCancel(){ // TODO: 在此添加控件通知处理程序代码 CloseHandle(m_hthread); OnCancel();} 添加自定义控件后出现“建立空文档失败” EditBox灰显问题 关于VC DATE TIME PICKER的问题!!! vc6.0写一个延时5秒的的程序,控制台下的就行 如何解决软件界面的显示效果与系统无关? DirectShow 在网络上广播AVI,一开始还好,可是当文件播放了20分钟以后,接收端的声音就明显的和视频不同步了。 难道只有用LoadImage之类载入的位图才能够在listctrl中显示吗? 大家帮忙看看这段代码错在那里???谢谢! 我见了鬼了,为什么变量不动它它的值也会变的? MFC新窗口问题 求助对话框 请问 如何给CLongBinary类型的数据赋值
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
m_dwThreadID=0;
m_hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE )Thread1,this,0,&m_dwThreadID);
//WaitForSingleObject(hthread,INFINITE);
}
UINT CThreadTest1Dlg::Thread1(LPVOID pParam)
{
CThreadTest1Dlg *pdlg=(CThreadTest1Dlg*)pParam;
//无模式对话框弹出后,此线程被堵塞了,因为MessageBox在关闭前不返回,虽然主界面对话框和消息框可以前后切换,但子线程被堵塞,不会更新edit更新秒时
//::MessageBox(NULL,"TEST",NULL,MB_OK); //投递一个自定义消息,自定义消息响应弹出一个无模式对话框,不等待直接返回,主界面的Edit继续显示秒时走动。
::PostMessage(pdlg->GetSafeHwnd(),WM_MSGBOX,NULL,NULL);
while(1)
{ CString str=CTime::GetCurrentTime().Format("%m:%S")+"\r\n";
pdlg->m_Edit.SetWindowText(str); //cout << str << endl;
Sleep(500);
}
}
LRESULT CThreadTest1Dlg::OnMsgBox(WPARAM wParam,LPARAM lParam)
{
//自定义消息响应函数,弹出一个非模式对话框
::MessageBox(NULL,"TEST",NULL,MB_OK);
return 0;
}
void CThreadTest1Dlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CloseHandle(m_hthread);
OnCancel();
}