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

求解线程类CWinThread的用法,为什么开了线程还会阻塞主窗口?该怎么解决

2014-07-10 
求解线程类CWinThread的用法,为什么开了线程还会阻塞主窗口?我在原来只有一个主对话框的情况下创建了一个

求解线程类CWinThread的用法,为什么开了线程还会阻塞主窗口?
我在原来只有一个主对话框的情况下创建了一个新对话框资源,里面有一个按钮 
class CMonitorDlg : public CDialog { DECLARE_DYNAMIC(CMonitorDlg)..... 
然后双击按键响应的函数 
void CMonitorDlg::OnBnClickedOk() { int i=1; // TODO: 
在此添加控件通知处理程序代码 
while(1) 
{
i++;
} //
然后从CWinThread派生了一个类 class CMonitorThread : public CWinThread 
在类中定义一个对话框成员 CMonitorDlg m_dlgMonitor;
 然后重载
virtual BOOL InitInstance() { m_dlgMonitor.Create(IDD_MONITOR);//id就是前面创建的新资源 
{
m_dlgMonitor.ShowWindow(SW_SHOW);
 m_pMainWnd=&m_dlgMonitor; 
}
 完成上面的工作后我在主窗口的一个按钮响应函数里启动了这个线程类
 CMonitorThread *p=(CMonitorThread *)AfxBeginThread(RUNTIME_CLASS(CMonitorThread),0); 
工程顺利通过编译,但是运行的时候我点击启动线程按键,弹出新对话框, 当我双击新对话框的按键,也就是那个死循环函数时,发现不单是新对话框卡住了, 主对框也响应不了任何消息,我线程类用的方法不对吗,为什么会这样?

[解决办法]

C/C++ code
UINT __cdecl ThreadProc(LPVOID lParam){ HWND hWnd = (HWND)lParam; ASSERT(hWnd); ... return 0;}void CXXDlg::OnButtonClick(){ AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());}
[解决办法]
http://blog.csdn.net/broadview2006/article/details/3784663
[解决办法]
探讨
引用:

C/C++ code
UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = (HWND)lParam;
ASSERT(hWnd);
...
return 0;
}
void CXXDlg::OnButtonClick()
{
AfxBeginThread(ThreadPr……

热点排行