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 :

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 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
 
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);
Dans le 3�me processus :

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);
}