UI线程的有关问题
UI线程的问题简单的创建了一个UI的线程里面起了一个非模态dlg,我想在这个dlg中sleep下来模拟繁重的任务,但
UI线程的问题
简单的创建了一个UI的线程里面起了一个非模态dlg,我想在这个dlg中sleep下来模拟繁重的任务,但是一sleep整个程序就堵死了,求解
IMPLEMENT_DYNCREATE(CMyThread, CWinThread)
CMyThread::CMyThread()
{
}
CMyThread::~CMyThread()
{
}
BOOL CMyThread::InitInstance()
{
// TODO: 在此执行任意逐线程初始化
m_dlg.Create(IDD_MYDIALOG);
m_dlg.ShowWindow(SW_SHOW);
return TRUE;
}
int CMyThread::ExitInstance()
{
// TODO: 在此执行任意逐线程清理
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CMyThread, CWinThread)
END_MESSAGE_MAP()
==========================================================
//启动UI线程
void CUIThreadDlg::OnBnClickedButton1()
{
AfxBeginThread(RUNTIME_CLASS(CMyThread));
}
[解决办法]你再dlg那个地方sleep,你的thread的ini中线程还没有开始运行,要重载run函数,那个时候线程才开始运行的。
[解决办法]你是在主线程中Sleep() ??那肯定是会阻塞当前的消息处理的
[解决办法]求提供demo
CWinThread的具体用法
说上只是粗鲁的提过,很少用,没见过例子
[解决办法]在主线程做繁重的任务之前,必须确保UI线程已启动,可以通过事件的方法启动线程.
还有,你必须给非模态对话框线程 写个消息循环.要不然启的线程界面就是一闪而过.
[解决办法]放到InitInstance中 在showWindows后.
[解决办法]非模态dlg,要用指针 new 出来,然后创建出来,然后用 ShowWindows显示。
要在 PostNcDestroy() 中delete this;
[解决办法]如楼上所说,感觉楼主创建的并非无模式对话框。
在CMyThread::InitInstance()里没必要自己写消息循环,CWinThread类有Run()函数。
CMyThread::InitInstance()里还要加一句:m_pMainWnd = ...;