2011-09-13 15 views
1

こんにちは私は、CreateProcess を使って複数のプロセスを作成しています。結果を分析するために、完了するまで待つ必要があります。C、Create Processes and wait

私はWaitForSingleObjectを実行できません。同時に実行されるすべてのプロセスが必要なためです。

各プロセスがProcess_Information(HPROCESS)でハンドルを持っているので 私はWaitForMultipleObjectsを使用しても大丈夫だった取り払わが、親プロセスは子を待たずに終了。 WaitForMultipleObjectsを使用しても問題ありませんか、それとも良い方法がありますか?

これは私がプロセスを作成しています方法です:

#define MAX_PROCESS 3 

STARTUPINFO si[MAX_PROCESS]; 
PROCESS_INFORMATION pi[MAX_PROCESS]; 
WIN32_FIND_DATA fileData; 
HANDLE find; 

int j=0, t=0; 

ZeroMemory(&si, sizeof(si)); 


for (t = 0; t < MAX_PROCESS; t++) 
    si[t].cb = sizeof(si[0]); 

ZeroMemory(&pi, sizeof(pi));  

while (FindNextFile(find, &fileData) != 0) 
{ 
    // Start the child process. 
    if (!CreateProcess(_T("C:\\Users\\Kumppler\\Documents\\Visual Studio 2010\\Projects\ \teste3\\Debug\\teste3.exe"), // No module name (use command line) 
         aux2,   // Command line 
         NULL,   // Process handle not inheritable 
         NULL,   // Thread handle not inheritable 
         TRUE,   // Set handle inheritance to FALSE 
         0,    // No creation flags 
         NULL,   // Use parent's environment block 
         NULL,   // Use parent's starting directory 
         &si[j],   // Pointer to STARTUPINFO structure 
         &pi[j])   // Pointer to PROCESS_INFORMATION structure 
     ) 
    { 
     printf("CreateProcess failed (%d).\n", GetLastError()); 
     return; 
    } 
    j++; 

    //find next file related 

}  
FindClose(find);   

WaitForMultipleObjects(MAX_PROCESS, &pi[j].hProcess, FALSE, INFINITE); 
//wait and analyze results 

はところで私はスレッドを使用しないようにしようとしています。

答えて

2

すべてのハンドルを待つ場合は、「bWaitAll」(3番目のパラメータ)を「TRUE」に設定します。

3

たWaitForMultipleObjectsハンドルの配列を期待:

HANDLE hanldes[MAX_PROCESS]; 
for (int i = 0; i < MAX_PROCESS; ++i) 
{ 
    handles[i] = pi[i].hProcess; 
} 

WaitForMultipleObjects(MAX_PROCESS, handles, TRUE, INFINITE); 

また、あなたがたWaitForMultipleObjectsのためにハンドルの最大配列サイズは(64)MAXIMUM_WAIT_OBJECTSに制限されていることを知っている必要があります。

+0

ありがとう、問題を解決しました – Caio