1.一般来说不要用CreateThread 创建线程、并用CloseHandle来关闭这个线程,因为这样做会导致内存泄漏,而应该用_beginthread来创建线程,_endthread来销毁线程。
因为在C的库中有全局变量。当一个线程已经开始创建了,就会创建一个结构来包含这些全局变量,接着把这些全局变量放入线程的上下文中和这个线程相关起来。这样,全局变量就会依赖于这个线程。
这个过程是在_beginThread时做的,而释放在_endTread内完成。
所以,当用_beginThread来创建,而用CloseHandle来关闭线程时(非return退出线程),这时复制的全局结构就不会被释放了,这就有了内存的泄漏。
其实,可以不用_beginThread和_endThread这一对函数。如果用CreateThread函数创建,用CloseHandle关闭,那么,与C有关的库就会用全局的,它们会引起冲突。
不过可以在线程内不用标准的C的库(可以使用Windows API的库函数)。这样就不会有什么问题,也就不会引起冲突。