听说调用【CreateProcess】函数容易出错,也就是当进程结束后容易出错?
1个回答
展开全部
没有容易出错啊,只要你正确调用就不会出错啊。唯一可能的是你在进程创建后,忘记去关闭相关的句柄了。但是也不会出错,只是导致资源的泄露。
或者你是指CreateThread了。并不建议使用该API,而是使用_beginthreadex。
具体请参考MSDN,那是最权威的资料。尤其要全面阅读,尤其是Remark部分。
或者你是指CreateThread了。并不建议使用该API,而是使用_beginthreadex。
具体请参考MSDN,那是最权威的资料。尤其要全面阅读,尤其是Remark部分。
追问
进程创建后,忘记去关闭相关的句柄了
哪些句柄要关闭?
追答
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags |= STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
// si的参数可以根据你的需要来设置,这里是创建了一个不显示窗口的进程。
BOOL bResult = CreateProcess(NULL, lptstrCmdLine, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi);
if (!bResult)
{
TRACE1("Failed CreateProcess, %d.\n", GetLastError());
return FALSE;
}
//如果需要等待你调用的进程结束,则使用这段代码。
DWORD dwWaitResult = WaitForSingleObject(pi.hProcess, INFINITE);
if (dwWaitResult == WAIT_FAILED)
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
TRACE1("Failed WaitForSingleObject, %d.\n", GetLastError());
return FALSE;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return TRUE;
具体可以参考MSDN,那里是最权威的资料!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询