Bonjour,
J'ai un probl�me qui est � priori assez simple mais que je n'arrive pas � r�soudre.
Ca se passe sous windows en c++ builder mais le pb n'est pas sp�cifique � builder.
J'ai un Processus principale qui lance un autre processus. Ce 2�me processus lance un 3�me processus et quitte imm�diatement.
J'aimerais pouvoir faire en sorte que mon processus principale attende la fin du 3�me processus pour poursuivre son execution.
Comment dois-je faire ?
Actuellement j'ai dans mon processus principale ceci :
Dans mon 2eme processus :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 // Création du mutex HANDLE hMutexFrontReplica = CreateMutex(NULL,FALSE,"REPLICA_FRONT_MUTEX"); // Lancement du 2ème processus STARTUPINFO startupInfo; PROCESS_INFORMATION procInfo; memset(&startupInfo, 0, sizeof(STARTUPINFO)); memset(&procInfo, 0, sizeof(PROCESS_INFORMATION)); startupInfo.cb = sizeof(STARTUPINFO); startupInfo.lpReserved = NULL; startupInfo.dwFlags = STARTF_USESHOWWINDOW; startupInfo.wShowWindow = SW_SHOWNORMAL; CreateProcess( NULL, "processus2.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &procInfo); // J'attends la fin du 2eme processus WaitForSingleObject(procInfo.hProcess,INFINITE) // J'attends la fin du 3eme processus if(hMutexFrontReplica) WaitForSingleObject(hMutexFrontReplica,INFINITE);
Dans le 3�me processus :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 HANDLE handle = OpenMutex(MUTEX_ALL_ACCESS,TRUE,"REPLICA_FRONT_MUTEX"); // Passage en état non signalé if(handle){ HRESULT hr = WaitForSingleObject(handle,INFINITE); } // Création du 3eme processus STARTUPINFO startupInfo; PROCESS_INFORMATION procInfo; memset(&startupInfo, 0, sizeof(STARTUPINFO)); memset(&procInfo, 0, sizeof(PROCESS_INFORMATION)); startupInfo.cb = sizeof(STARTUPINFO); startupInfo.lpReserved = NULL; startupInfo.dwFlags = STARTF_USESHOWWINDOW; startupInfo.wShowWindow = SW_SHOWNORMAL; CreateProcess( NULL, "processus3.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &procInfo);
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 HANDLE handle = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"REPLICA_FRONT_MUTEX"); if(handle != NULL){ ReleaseMutex(handle); }
Partager