听说调用【CreateProcess】函数容易出错,也就是当进程结束后容易出错?

我记不得CreateProcess是什么问题了,反正好像是有问题,听说是非常容易出错... 我记不得CreateProcess是什么问题了,反正好像是有问题,听说是非常容易出错 展开
 我来答
why755
2014-12-08 · TA获得超过311个赞
知道小有建树答主
回答量:624
采纳率:75%
帮助的人:345万
展开全部
没有容易出错啊,只要你正确调用就不会出错啊。唯一可能的是你在进程创建后,忘记去关闭相关的句柄了。但是也不会出错,只是导致资源的泄露。

或者你是指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,那里是最权威的资料!!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式