MFC 线程类CWinThread的用法,实现两个窗口互不阻塞 20

我在原来只有一个主对话框的情况下创建了一个新对话框资源,里面有一个按钮classCMonitorDlg:publicCDialog{DECLARE_DYNAMIC(CMo... 我在原来只有一个主对话框的情况下创建了一个新对话框资源,里面有一个按钮 class CMonitorDlg : public CDialog { DECLARE_DYNAMIC(CMonitorDlg)..... 然后双击按键响应的函数 void CMonitorDlg::OnBnClickedOk() { int i=1; // TODO: 在此添加控件通知处理程序代码 while(1) {i++;} //OnOK(); } 然后从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); 工程顺利通过编译,但是运行的时候我点击启动线程按键,弹出新对话框, 当我双击新对话框的按键,也就是那个死循环函数时,发现不单是新对话框卡住了, 主对框也响应不了任何消息,我线程类用的方法不对吗,为什么会这样? 展开
 我来答
faketamendie
2012-02-13 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:141万
展开全部
MFC中用AfxBeginThread来启动新线程,不要直接使用CWinThread类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a36254094
2012-02-28 · TA获得超过208个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:176万
展开全部
你在while(1){i++}加句代码sleep(1000);
再运行下 看看还会不会卡 这种死循环运行太快,时间片切换的时候容易出问题
更多追问追答
追问
试过了还是阻塞住主界面了,是不是我用这个类的方法不对呢
追答
问题出在你那万恶的死循环上了,你想一下啊你的进程一直在死循环里,也是就程序一直在等待响应你的双击事件,因为你的CMonitorDlg::OnBnClickedOk() 一直没有执行完,所以那个进程的消息队列锁死了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淳朴还健美的光芒J
2012-02-24
知道答主
回答量:23
采纳率:0%
帮助的人:13.6万
展开全部
你需要在线程死循环函数里放置Sleep或者等待信号量。这就能把CPU时间交给别的线程了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-02-12
展开全部
你能把你的工程打个包上传嘛? 光看你说实际代码是怎样的好难猜啊,找个地方上传下吧;方便大家帮你查错
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式