首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

UI线程的有关问题

2013-10-07 
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() ??那肯定是会阻塞当前的消息处理的
[解决办法]
引用:
你再dlg那个地方sleep,你的thread的ini中线程还没有开始运行,要重载run函数,那个时候线程才开始运行的。


求提供demo
CWinThread的具体用法

说上只是粗鲁的提过,很少用,没见过例子

[解决办法]
在主线程做繁重的任务之前,必须确保UI线程已启动,可以通过事件的方法启动线程.
还有,你必须给非模态对话框线程 写个消息循环.要不然启的线程界面就是一闪而过.
[解决办法]
引用:
引用:
在主线程做繁重的任务之前,必须确保UI线程已启动,可以通过事件的方法启动线程.
还有,你必须给非模态对话框线程 写个消息循环.要不然启的线程界面就是一闪而过.

有例子么,我看到


C/C++ code
?



12345678910

if (PeekMessage (&msg, NULL, 0, 0, PM……


放到InitInstance中 在showWindows后.
[解决办法]
非模态dlg,要用指针 new 出来,然后创建出来,然后用  ShowWindows显示。
要在 PostNcDestroy() 中delete this;

[解决办法]
如楼上所说,感觉楼主创建的并非无模式对话框。
在CMyThread::InitInstance()里没必要自己写消息循环,CWinThread类有Run()函数。
CMyThread::InitInstance()里还要加一句:m_pMainWnd = ...;

热点排行