int i=0;
while(i<1000)
{
HANDLE h = CreateThread(NULL, 0, TestThread, NULL, 0, NULL);
i++;
CloseHandle(h);
}DWORD CALLBACK TestThread(LPVOID lpParm)
{
return 0;
}循环启动1000个子线程,内存增加100K以上,请问大虾是怎么回事?是我哪里没有释放吗?
while(i<1000)
{
HANDLE h = CreateThread(NULL, 0, TestThread, NULL, 0, NULL);
i++;
CloseHandle(h);
}DWORD CALLBACK TestThread(LPVOID lpParm)
{
return 0;
}循环启动1000个子线程,内存增加100K以上,请问大虾是怎么回事?是我哪里没有释放吗?
你可以这样来验证自己的程序是否有泄露:
int i=0;
while(i <1000)
{
HANDLE h = CreateThread(NULL, 0, TestThread, NULL, 0, NULL);
i++;
WaitForSingleObject(h, -1); // 在这里等待线程结束,以免造成系统交叉分配和释放内存
CloseHandle(h);
}
可能你已经跑过了10个循环,你第一个线程还没跑到内核对象清除的地方,不存在泄露。
建议你看看 一段时间后,占用的内存是否会降下来。
while(j<100){
int i=0;
while(i <1000)
{
HANDLE h = CreateThread(NULL, 0, TestThread, NULL, 0, NULL);
i++;
WaitForSingleObject(h, -1); // 在这里等待线程结束,以免造成系统交叉分配和释放内存
CloseHandle(h);
}
Sleep(10000);
j++;
}
你试试。这样行不。
#include <windows.h>
#include <stdio.h>
#include <conio.h>DWORD WINAPI ThreadPro(LPVOID)
{
return 0;
}int main()
{
int i;
HANDLE hTread;
printf("按任意键继续!!\n");
getch();
for (i = 0; i < 1000; i++)
{
hTread = CreateThread(NULL, 0, ThreadPro, NULL, 0, NULL);
WaitForSingleObject(hTread, INFINITE);
CloseHandle(hTread);
}
printf("按任意键继续!!\n");
getch();
return EXIT_SUCCESS;
}
你必须进行closehandle(hThread),但是发现每个还是有4k左右内存的损失,可能和主线程有关系