如果用TerminateThread不会释放资源。但书上说,用TerminateThread后紧接这ExitInstance,CloseHandle就能释放资源。是这样的吗?如果用AfxEndThread终止,具体该怎么用?
解决方案 »
- windows7下VC6.0在调试Activex的情况下工程设置的调试选项可执行对话下拉框:Default Web Browser为灰色不可用
- 多个网卡,怎么知道是哪个网卡连接到internet了呢?
- 给VC++6.0自带的光标制作工具气昏头了!光标热点如何定义?
- 菜鸟之C++何从下手?
- 初学者提问:如何提高调试技巧?针对错误提示,应对措施?请帮忙分析以下语法错误
- release下,列表视图改变行图标的问题
- 飞哥,我的分
- 如何让EDIT控件里面输入的值传给与之对应的数据成员啊?
- 计算图像的信噪比相关问题?
- 如何读取wav文件数据
- OnInitDialog里返回FALSE
- 怎样实现photoshop中的磁性套索功能呢?
例如你的线程函数如下:
UINT ThreadFunc(LPVOID lparam)
{
AfxEndThread(0);//就可以使当前线程强行退出
}
不过一般情况下也不提倡使用AfxEndThread这个函数来结束线程,他令操作系统强行清楚该线程所使用的资源而且会造成c++对象不能正确的调用其析构函数!
例如:
#include <windows.h>
#include <stdio.h>
class obj {
public:
obj(){printf("constructor")};
~obj(){prinf("destructor")};
};obj g_obj;
int main() {
obj localobj;
ExitThread(0);//在这里使用ExitThread,他和AfxExitThread等效
}看一下运行结果就会很清楚了,结果表明对象的析构函数没有被调用建议使用一种比较好的方式来结束线程的执行使用Event对象HANDLE hEvent;
hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);//创建手工重置的Event对象
UINT ThreadFunc(LPVOID lparam)
{
.......
if( WaitForSingleObject(hEvent,0) == WAIT_OBJECT_0)
return 0;//让线程函数正常返回就没有问题了
return 0;
}希望对你有所帮助!