句柄无法释放

ho121 2012-12-15 07:08:47
这个代码每次循环都会创建一个进程,我在进程创建后都CloseHandle,但是任务管理器依然是在每次循环都增加一个句柄数


#include <stdio.h>
#include <windows.h>

int main(void)
{
BOOL StartUpStatus;
STARTUPINFO StartUpInfo;
PROCESS_INFORMATION ProcessInfo;
int ExitCode = -1;

while(1)
{

memset(&StartUpInfo, 0, sizeof(StartUpInfo));
StartUpInfo.cb = sizeof(StartUpInfo);

StartUpInfo.lpReserved = NULL;
StartUpInfo.lpDesktop = NULL;
StartUpInfo.lpTitle = NULL;
StartUpInfo.dwFlags = STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow = SW_HIDE;
StartUpInfo.cbReserved2 = 0;
StartUpInfo.lpReserved2 = NULL;
memset(&ProcessInfo, 0, sizeof(ProcessInfo));

StartUpStatus = CreateProcess(NULL, "cmd /c exit", NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &StartUpInfo, &ProcessInfo);

if( StartUpStatus == FALSE )
{
return 1;
}

WaitForSingleObject(ProcessInfo.hProcess, INFINITE);

GetExitCodeProcess(ProcessInfo.hProcess, (PDWORD)&ExitCode);

CloseHandle(ProcessInfo.hThread);
printf("%d\n", (int)GetLastError());

CloseHandle(ProcessInfo.hProcess);
printf("%d\n", (int)GetLastError());

Sleep(2000);

}

return 0;
}



比如说第一次循环时,显示当前进程有28个句柄,第二次循环时,显示当前进程有29个句柄,第三次循环时,显示当前进程有30个句柄,一直升,可是我CloseHandle了啊,难道还有什么句柄没有被Close掉?
...全文
446 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ho121 2012-12-15
  • 打赏
  • 举报
回复
但如果频繁CreateProcess的话,这没释放的Handle会不会消耗很多资源
引用 5 楼 twilight1980 的回复:
LPCTSTR 人家说的关键是C,而不是你说的T 代码没什么问题,没释放可能是系统有自己的机制吧
twilight1980 2012-12-15
  • 打赏
  • 举报
回复
LPCTSTR 人家说的关键是C,而不是你说的T 代码没什么问题,没释放可能是系统有自己的机制吧
ho121 2012-12-15
  • 打赏
  • 举报
回复
LPTSTR An LPWSTR if UNICODE is defined, an LPSTR otherwise. LPSTR A pointer to a null-terminated string of 8-bit Windows (ANSI) characters. 我想我没有错
bsnry 2012-12-15
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
CreateProcess的第二个参数不是LPCTSTR,而是LPTSTR,所以需要写成这样: C/C++ code?12TCHAR szApp[MAX_PATH] = {_T("cmd /c exit")};StartUpStatus = CreateProcess(NULL, szApp, NULL, NULL, FALSE, CREATE_NO_WINDOW, N……
_Inout_opt_ LPTSTR lpCommandLine, 不对啊,你看,说明
ho121 2012-12-15
  • 打赏
  • 举报
回复
抱歉,我用Mingw,好像没有_T这个宏,怎么办?
引用 1 楼 VisualEleven 的回复:
CreateProcess的第二个参数不是LPCTSTR,而是LPTSTR,所以需要写成这样: C/C++ code?12TCHAR szApp[MAX_PATH] = {_T("cmd /c exit")};StartUpStatus = CreateProcess(NULL, szApp, NULL, NULL, FALSE, CREATE_NO_WINDOW, N……
Eleven 2012-12-15
  • 打赏
  • 举报
回复
CreateProcess的第二个参数不是LPCTSTR,而是LPTSTR,所以需要写成这样:


TCHAR szApp[MAX_PATH] = {_T("cmd /c exit")};
StartUpStatus = CreateProcess(NULL, szApp, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &StartUpInfo, &ProcessInfo);

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧