Windows作成サブプロセス

2569 ワード

Windowsでサブプロセスを作成するにはlinuxのfork関数ほど便利ではありません.CreateProcess関数を使用して新しいプロセスを作成します.関数の定義は次のとおりです.
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