CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))InsertThread, (LPVOID)this,0,NULL);怎么去判断是否已经结束,以便终止它.用户有可能在没有执行完进程就把程序关了,从而造成程序报错
解决方案 »
- 请问为什么用VBArray()将ATL COM中返回的数组类型变量转换为Javascript的数组时说缺少VBArray?
- 请帮忙解决:没有注册类别 dtspkg.dll
- CListCtrl 如何获取当前所选行的索引
- 如何把对话框内嵌的HTML页面中JS的运行结果取出来?急!急死啦!
- UnInstallShield卸载时对环境变量的删除与修改问题??
- 哪里有BitTorrent源码下载
- 菜之又菜问题
- 我的CSDN密码被IE记住了,怎么办?急急急
- vc中怎样编译驱动程序
- 关于文件读写的小问题,没弄过,问一下!
- 替换windows 2000/xp 的gina的步骤!!在线等!!
- 金融IT中VC的应用
...
if(WaitForSingleObject(h,1000)==WAIT_OBJECT_0)
{
// 表示线程已经退出.
}
2. 永远(如果可能)不要用TerminateThread去中止线程。线程退出唯一安全方法是它自己退出。因此,你需要用某种方式让线程自己退出,至于哪种方式合适,要看线程自己的逻辑
使用TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。因此,一般不建议使用该函数。 --引用
static DWORD WINAPI InsertThread(CTongJiJHCK *pDlg);//声明
==========================================================================
在OnInitDialog()最后面加入
DWORD uExitCode;
GetExitCodeThread(hThread,&uExitCode);
if(uExitCode==STILL_ACTIVE)
{
TerminateThread(hThread,uExitCode);
}
hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))InsertThread, (LPVOID)this,0,NULL);
===================================================================================
DWORD WINAPI CTongJiJHCK::InsertThread(CTongJiJHCK *pDlg)
{
pDlg->InsertDataToList();//(这是CTongJiJHCK的成功函数)
return 0;
}
这个函数就是访问数据然后向CListCtrl加载数据如果数据没加载完用户关闭了对话框 就会出错.看了错误签名,就是应用程序的的名字 ModName:XXX.exe
GetExitCodeThread(hThread,&uExitCode);
if(uExitCode==STILL_ACTIVE)
{
TerminateThread(hThread,uExitCode);
}
================================
这一句是没有必要的,从你的代码中看,InsertDataToList如果执行完成,这个线程函数用return 0返回,线程本身就已经结束了,根本就不用你自己想办法来让它结束.
即在 hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))InsertThread, (LPVOID)this,0,NULL); 后面加一句WaitForSingleObject(hThread,....);
或者,你处理一下WM_CLOSE消息也可以.