Windows下的API接口函数CreateProcess()可以用来创建一个进程和主线程。新进程执行指定的可执行文件(一般为.exe文件)。但如果要创建的进程是一个GUI界面的启动程序(类似QQ启动界面),启动该进程需要加载插件,并且只有该进程的服务完全启动后,后续才能调用相应接口实现功能。此时如何准确的等待进程启动起来,即等待子进程启动时间的界定是个难题。
二、Windows MSDN 中CreateProcess的使用方法:STARTUPINFO si;
PROCESS_INFORMATION pi;
LPTSTR szCmdline=_tcsdup(TEXT("MyChildProcess"));
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
szCmdline, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
printf( "CreateProcess failed (%d)./n", GetLastError() );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
typedef enum _PROCESS_STATE_STATUS
{
PROCESS_STATE_OK, //正常启动;
PROCESS_STATE_TERMINIATE //中途退出;
} PROCESS_STATE_STATUS;