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