急,关于对话框程序退出后任务管理器进程中还能看到该对话框程序exe还未结束退出的问题?
开发平台:VC6.0+Windows Server 2003
程序模式:MFC对话框应用程序
对话框应用程序无标题栏,初始化时全屏显示。
我的应用程序中用到了如下资源:
1、主线程用socket进行收发数据,为客户端链接本地服务器端;
2、开启了一个线程用于接收来自TCP端口的数据,线程用CreateThread创建;
3、用到WebBrowser控件用于播放PowerPoint;
4、用到了Office Ole自动化接口操作PowerPoint;
5、用到了命名管道与ATL插件通信;
6、用到了GDI绘图;
7、用到了CButtonST、CBackgroundUtil、CResizeDialog、CToolTipCtrl类
8、用到了MySQL-5.0.51b-win32
9、用到了ini配置文件的读取
上面是我用到的一些资源,下面是我退出对话框应用程序的流程和回收资源的代码:
流程:对话框上放置了一个按钮,按钮ID为IDOK,点击该按钮退出应用程序,下面是该函数中的代码:
void CXXXDlg::OnOK()
{
/****变量注释****/
// MYSQL mysql; // 数据库连接句柄
// HANDLE m_ThreadHandle; // 接收线程句柄
// SOCKET sockClient; // 收发数据套接字
// _Application app; // PowerPoint对象
if ( IDYES == MessageBox(_T("确认退出请选择是,否则请选择否"), _T("XXX"), MB_YESNO) )
{
mysql_close(&mysql);
if (CanExit())
{
if(m_ThreadHandle)
{
if( ::WaitForSingleObject(m_ThreadHandle, 1000) == WAIT_TIMEOUT )
{
//如果超时:
TerminateThread(m_ThreadHandle, NULL);
}
CloseHandle(m_ThreadHandle);
m_ThreadHandle = NULL;
}
closesocket(sockClient);
WSACleanup();
app.DetachDispatch();
app.ReleaseDispatch();
CDialog::OnOK();
}
}
else
{
return;
}
}
问题一:点击按钮执行上面函数后,对话框是退出了,可是在任务管理器的进程栏中的exe要6秒左右才会自动退出。
这是什么原因?
个人认为是资源没有回收完。
问题二:这种情况一般是哪些资源没有回收?
问题三:一般程序退出要注意些什么?
问题四:我的程序要求是单实例运行,用CreateSemaphore创建信号量实现单实例运行(如果已经运行了一个实例则激活该实例,否则重新运行一个实例),如果不解决问题一,当退出程序后再重新启动程序时点击exe将无法启动程序,因为前面的进程还没有真正结束,请问如何解决该问题,我的退出函数OnOK()有什么问题?
谢谢!
分不够可以加!
问题解决后立即揭帖,按劳分配。
再次感谢!