Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455540
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 17:18:25

zaodt:写的非常好,这真是菜鸟们的福音,例子也非常好,简单易懂!非常感谢作者,希望能写出更多的好文章!

这里,我找一个很小的缺陷:在MFC工作线程函数中,int nTemp=pInfo->nMilliSecond; 放到 for 语句前更合适。
 ---- 杭州 至尊宝 zaodt_ms@hotmail.com
(发表于2006-11-15 10:23:00)

梦龙:的确非常不错。完整的看过文章,并且按照例子做下来,就基本上掌握了多线程!
(发表于2006-11-15 21:18:00)

fengminggao:各位大哥,在MultiThread6中如何处理在进程没退出之前,终止线程的执行(用户界面线程窗口已关闭,但是线程还存活 spy++可查看)。
(发表于2006-12-6 22:08:00)

hongjie7117:Detected memory leaks!
Dumping objects ->
D:\MultiThread6\UIThread.cpp(17) : {84} client block at 0x00422DE0, subtype 0, 208 bytes long.
a CUIThread object at $00422DE0, 208 bytes long
Object dump complete.

好象例子6中有内存泄露
(发表于2007-8-31 14:46:00)

hongjie7117:代码中
int CUIThread::ExitInstance()
{
m_dlg.DestroyWindow();
return CWinThread::ExitInstance();
}
不会被执行所以导致内存泄露。
可以在void CUIThreadDlg::OnOK() 
{
// TODO: Add extra validation here

CDialog::OnOK();
DestroyWindow();
}

void CUIThreadDlg::OnCancel() 
{
// TODO: Add extra cleanup CDialog
CDialog::OnCancel();
DestroyWindow();
}
增加DestroyWindow();来销毁对象;
或者在CUIThread中声明的CUIThreadDlg指针来操作;
在void CUIThreadDlg::OnDestroy() 
{
CDialog::OnDestroy();
delete this;
// TODO: Add your message handler code here

}
调用delete this;
总之要把Create出的对象调用DestroyWindow()
来销毁

作者用的
ExitInstance里销毁 那么就要自己重载Run函数在内部进行处理消息来调用ExitInstance
(发表于2007-8-31 15:20:00)

badboyfind:你们说的错误在下面
m_dlg.Create(IDD_UITHREADDLG); //此处为错误
m_dlg.ShowWindow(SW_SHOW); 
m_pMainWnd=&m_dlg;


一定要记得,在创建非模态对话框的时候,要new出来的对话框才需要DestroyWindow(),然后再在PostNcDestroy()中delete this;

建议阅读下面的文章:
http://hi.baidu.com/listenprogram/blog/item/4902d5c62e005f1f9c163d86.html
(发表于2008-3-19 9:13:00)

badboyfind:改正为
CUIThreadDlg *m_dlg = new CUIThreadDlg();
m_dlg->Create(IDD_UI_MUTITHREAD_DLG);
m_dlg->ShowWindow(SW_SHOW);
m_pMainWnd=m_dlg;

然后在CUIThreadDlg类中重载OnCancel(),调用DestroyWindow(),重载PostNcDestroy()中delete this;这样可以完全释放资源
(发表于2008-3-19 9:25:00)

badboyfind:如果不new出的非模态对话框
则m_dlg.Create(IDD_UITHREADDLG); //此处为错误
m_dlg.ShowWindow(SW_SHOW); 
m_pMainWnd=&m_dlg;

然后在CUIThreadDlg 类中重载OnCancel(),调用DestroyWindow()即可,而无需再调用CDialog::Oncancel(). 不要重载PostNcDestroy()中delete this;这样可以完全释放资源。 
这样int CUIThread::ExitInstance()
{
m_dlg.DestroyWindow();
return CWinThread::ExitInstance();
}
中的m_dlg.DestroyWindow();就不要需要了
(发表于2008-3-19 9:38:00)

..........................................................................
--------------------next---------------------

阅读(355) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~