IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Mutex et CreateProcess


Sujet :

Threads & Processus C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par d�faut Mutex et CreateProcess
    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);
    }

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Qu'en est-il du second processus?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par d�faut
    Oups j'avais oubli� le code du 3�me processus.

    Merci d'avance

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    D�tails du profil
    Informations personnelles :
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par d�faut
    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 ?
    Tu cr�e un �venement dans tes deux processus et tu met dans tin processuss principal :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    					::WaitForSingleObject(_Monevent,INFINITE);
    ::ResetEvent(_Monevent);
    et tu lance cet �venement � la fin de l'ex�cution de ton 3�me process
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ::SetEvent(_Monevent);
    Bon courage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par d�faut
    Merci mehdi pour ta r�ponse j'essaie ca de suite...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par d�faut
    Nickel ! Ca marche !
    Voici le code modifi� :

    Principal :

    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
    32
    33
    34
    35
    36
     
    // Création de l'évènement non signalé au démarrage
    HANDLE handle = CreateEvent(
            NULL,
            FALSE,	// flag for manual-reset event
            FALSE,	// flag for initial state
            "REPLICA_FRONT_END_EVT" 	// pointer to event-object name
          );
     
    // 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
    WaitForSingleObject(handle,INFINITE);
    ResetEvent(handle);
    // 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
     
    // 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);

    // 3eme processus
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    // Signaler l'evt
    HANDLE handle = OpenEvent(EVENT_ALL_ACCESS ,FALSE,"REPLICA_FRONT_END_EVT");
    if(handle){
      SetEvent(handle);
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [EXECUTION] CreateProcess / ShellExecute
    Par jmdeffet dans le forum API, COM et SDKs
    R�ponses: 2
    Dernier message: 14/10/2004, 10h33
  2. CreateProcess (impossible de g�rer le symbole >
    Par borgirz dans le forum Windows
    R�ponses: 4
    Dernier message: 03/06/2004, 10h53
  3. [CreateProcess] Comment cacher la fen�tre ?
    Par iubito dans le forum API, COM et SDKs
    R�ponses: 5
    Dernier message: 27/04/2004, 18h27
  4. R�ponses: 2
    Dernier message: 05/04/2004, 23h06
  5. CreateProcess + param�tres pass�
    Par obione dans le forum API, COM et SDKs
    R�ponses: 2
    Dernier message: 20/03/2003, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo