请问:
问题1: 在非模式对话框的类中 OnInitDialog()成员函数中,创建了一个线程,之后我想在关闭该非模式对话框窗体时,关闭线程。在重写的OnCancel()虚函数中添加了如下代码:
LPDWORD lpExitCode;
GetExitCodeThread(hThread3,lpExitCode);
TerminateThread(hThread3,(DWORD)lpExitCode);可是结果是窗体销毁了,线程依然还在运行。 怎样关闭该线程?
问题1: 在非模式对话框的类中 OnInitDialog()成员函数中,创建了一个线程,之后我想在关闭该非模式对话框窗体时,关闭线程。在重写的OnCancel()虚函数中添加了如下代码:
LPDWORD lpExitCode;
GetExitCodeThread(hThread3,lpExitCode);
TerminateThread(hThread3,(DWORD)lpExitCode);可是结果是窗体销毁了,线程依然还在运行。 怎样关闭该线程?
解决方案 »
- 请问怎么从dll中释放一个exe然后执行它?
- 帮忙看一下,这样的查询语句(SQL)怎么写?
- 初学者郁闷,求教!
- 谁能提供C语言代码重构的例子程序,多谢!
- 重金求组(100分,感谢漫步者,Tony宝宝的指点,希望能有人回答这个问题)何使提示条显示一段时间后,使其自动消失
- 怎样将背景位图与其上绘制的曲线一起存成一幅新的位图?
- Socket 必须给一个窗口来处理消息吗?
- 如果一个文本文件已被其他进程以写的方式打开,我在程序中如何将其内容清空?
- 在#include <commdlg.h>和#include "resource.h"有引号和有<>到底有什么区别?
- 出现断言应该怎么去找错?
- 【原创&交流】关于warning C4995的屏蔽问题
- 请问:接收位图数据的代码要放在哪个事件中?
在线程函数里等待你这个事件变量为已通知状态之后就return。
在对话框构造函数中添加 hThread3 = NULL; 这句.其次,楼主确定你的非模态对话框已经销毁了吗?非模态对话框按OK/Cancel只是隐藏,不是销毁。对话框类重载 PostNcDestroy 虚函数,在 CDialog::PostNcDestroy(); 这句代码之下添加 delete this;像这样:
void CXXXDlg::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类
CDialog::PostNcDestroy();
delete this; //一定添加到这里
}
再次,线程是在OnDestroy()而不是OnCancel()中销毁的。把你的代码写在OnDestroy()中。最后,把OnCancel()中的OnCancel();这句代码注释掉,并添加DestroyWindow();的调用!void CxxxDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
DestroyWindow();
//OnCancel();
}
要不你就设置一个event,通知event关闭线程再销毁对话框
创建线程最好用AfxBeginThread
hThread3 = AfxBeginThread(...)在OnDestroy()中销毁
//结束线程
if( hThread3 != NULL )
{
if(::WaitForSingleObject(hThread3->m_hThread, 3000) == WAIT_OBJECT_0)
{
delete hThread3;
hThread3 = NULL;
}
else
{
::TerminateThread(hThread3->m_hThread,0); //强制结束线程
}
}