Windows作成サブプロセス
2569 ワード
Windowsでサブプロセスを作成するにはlinuxのfork関数ほど便利ではありません.CreateProcess関数を使用して新しいプロセスを作成します.関数の定義は次のとおりです.
次に、作成プロセスと簡単な制御例を書きます.まず、サブプロセスのエンティティとしてウィジェットを作成します.
CreateProcessのパラメータは多くて面倒ですが、ほとんどNULLに設定すればいいです.右のリンクにはマルチプロセスプログラミングに関する関数の紹介があります.http://blog.csdn.net/bxhj3014/article/details/2082255
BOOL CreateProcess(
LPCTSTR lpApplicationName, //
LPTSTR lpCommandLine, //
LPSECURITY_ATTRIBUTES lpProcessAttributes, //
LPSECURITY_ATTRIBUTES lpThreadAttributes, //
BOOL bInheritHandles, //
DWORD dwCreationFlags, //
LPVOID lpEnvironment, //
LPCTSTR lpCurrentDirectory, //
LPSTARTUPINFO lpStartupInfo, //
LPPROCESS_INFORMATION lpProcessInformation //
);
次に、作成プロセスと簡単な制御例を書きます.まず、サブプロセスのエンティティとしてウィジェットを作成します.
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
cout << "args_num: " << argc << endl;
for(int i = 0;i < argc;i ++){
cout << "arg " << i << " = " << argv[i] << endl;
}
return 0;
}
は主に印刷プロセスの入力パラメータのリストで、以下はサブプロセスを作成するコードで、実行後に見ることができて、サブプロセスも入力パラメータを取得することができます.#include
#include
using namespace std;
int main()
{
char cWindowsDirectory[MAX_PATH];
//LPTSTR wchar_t* (Unicode )
LPTSTR cWinDir = new TCHAR[MAX_PATH];
GetCurrentDirectory(MAX_PATH, cWinDir);
LPTSTR sConLin = wcscat(cWinDir , L"\\..\\Debug\\another.exe a b c d");
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
//
if(CreateProcess(
NULL, // NULL 、
sConLin, //
NULL, // SECURITY_ATTRIBUTES , 。
NULL, // lpProcessAttributes (NULL), 。
false,// 。
0, // 、
// CREATE_NEW_CONSOLE
// CREATE_SUSPENDED , ResumeThread
NULL, // 。 ,
NULL, //
&si, // STARTUPINFO
&pi // PROCESS_INFORMATION
))
{
cout << "create process success" << endl;
// , , TerminateProcess
// CloseHandle(pi.hProcess);
// CloseHandle(pi.hThread);
}
else{
cerr << "failed to create process" << endl;
}
Sleep(100);
//
TerminateProcess(pi.hProcess, 300);
// ,
ExitProcess(1001);
return 0;
}
CreateProcessのパラメータは多くて面倒ですが、ほとんどNULLに設定すればいいです.右のリンクにはマルチプロセスプログラミングに関する関数の紹介があります.http://blog.csdn.net/bxhj3014/article/details/2082255