#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
class CMyClass
{
public:
CMyClass()
{
printf("CMyClass()\n");
}
~CMyClass()
{
printf("~CMyClass()\n");
}
};
DWORD WINAPI TreadFunc(LPVOID lpParam)
{
CMyClass obj;
int i = 0;
while (i < 2000)
{
printf("I am from a thread, count = %d\n", i++);
::Sleep(1);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hTread = NULL;
DWORD dwThreadId = 0;
hTread = ::CreateThread(NULL, 0, TreadFunc, NULL, 0, &dwThreadId);
printf("Now another thread has been created. ID=%d\n", dwThreadId);
//::Sleep(50);
//::TerminateThread(hTread, 0);
::WaitForSingleObject(hTread, INFINITE);
::CloseHandle(hTread);
getchar();
return 0;
}
线程自然退出,c++类对象的析构函数能得到执行;
线程强行退出,c++类对象的析构函数不能得到正常执行,会造成内存泄漏。而且系统也不会释放线程使用的堆栈!不到万不得已不建议使用TerminateThread !!!
案例来自《windows程序设计》 王艳平 张狰