gpt4 book ai didi

c++ - 单独调用两个 CreateProcess() 可以共享相同的启动和进程信息吗?

转载 作者:行者123 更新时间:2023-11-28 08:02:17 25 4
gpt4 key购买 nike

如果我多次使用 CreateProcess(),是否可以共享 PROCESS_INFORMATIONSTARTUPINFO 变量?或者这真的是不好的做法?我已经阅读了相当多的文档,但找不到任何有关多次处理 CreateProcess() 调用的示例。

举个例子,假设我有下面的假函数:

    int SampleClass::sampleFn1(){ 
//Variables
STARTUPINFOW siStartInfo;
PROCESS_INFORMATION piProcInfo;
memset(&siStartInfo, 0, sizeof(siStartInfo));
memset(&piProcInfo, 0, sizeof(piProcInfo));
siStartInfo.cb = sizeof(siStartInfo);

//let us assume cmdPath = cmd.exe directory, and cmdTxtPtr has correct text
if(!CreateProcess(cmdPath, cmdTxtPtr, NULL, NULL, false, 0,
NULL, NULL, &siStartInfo, &piProcInfo)){
return 1; //failed at step 1
}
if(!CreateProcess(cmdPath,_T("/C ant debug"),NULL,NULL,false,0,NULL,
(LPCTSTR)directory,&siStartInfo,&piProcInfo)){
return 2; //failed at debug
}
WaitForSingleObject(piProcInfo.hProcess,10000);
result = GetExitCodeProcess(piProcInfo.hProcess,&exitCode);
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
return 0;//finished
}

我的程序中碰巧有一个类似的函数,但我希望它尽可能安全。

或者...我应该改为执行类似以下代码的操作:

    int SampleClass::sampleFn2(){   
//Variables
STARTUPINFOW siStartInfo;
PROCESS_INFORMATION piProcInfo;
memset(&siStartInfo, 0, sizeof(siStartInfo));
memset(&piProcInfo, 0, sizeof(piProcInfo));
siStartInfo.cb = sizeof(siStartInfo);

//let us assume cmdPath = cmd.exe directory, and cmdTxtPtr has correct text
if(!CreateProcess(cmdPath, cmdTxtPtr, NULL, NULL, false,
0, NULL, NULL, &siStartInfo, &piProcInfo)){
return 1; //failed at update project
}
WaitForSingleObject(piProcInfo.hProcess,10000);
result = GetExitCodeProcess(piProcInfo.hProcess,&exitCode);
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);

memset(&siStartInfo, 0, sizeof(siStartInfo));
memset(&piProcInfo, 0, sizeof(piProcInfo));
siStartInfo.cb = sizeof(siStartInfo);
if(!CreateProcess(cmdPath,_T("/C ant debug"),NULL,NULL,
false,0,NULL,(LPCTSTR)directory,&siStartInfo,&piProcInfo)){
return 2; //failed at debug
}
WaitForSingleObject(piProcInfo.hProcess,10000);
result = GetExitCodeProcess(piProcInfo.hProcess,&exitCode);
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
return 0;//finished
}

还是他们都处理不好?谢谢。

最佳答案

AFAIK CreateProcess 函数写入了 STARTUPINFO 和 PROCESSINFO 结构,所以除非你不关心任何这些信息,我认为你应该这样做,否则你可以做你给出的第二个例子.

通过使用 0 执行 memset,您将结构中的所有数据重置为 0。

我不确定这是不是很好的做法,但也许其他人可以提供更多见解。

关于c++ - 单独调用两个 CreateProcess() 可以共享相同的启动和进程信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com