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

C++ Discussion :

2 programmes interagi entre eux


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 36
    Par défaut 2 programmes interagi entre eux
    bonjour à tous,

    J’ai un programme lance avec un thread en pause avec une mutex bloquer.
    J’ai un second programme qui va débloquer le thread de l’autre programme

    Voici le code du premier programme lancé.
    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
    37
    38
    39
    40
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
     
    using namespace std;
     
    HANDLE mut;
    char text[5000];
     
    unsigned long WINAPI Thread_mutex (void * Param)
    {
    	cout << " lencement thread  \n" ;
    	cout << " WaitForSingleObject thread \n" ;
            WaitForSingleObject(mut,INFINITE);
    	cout << " WaitForSingleObject thread  effectué\n" ;
    	cout << " traitement de la thread\n" ;
    	cout << " ReleaseMutex thread \n" ;
    	ReleaseMutex(mut);
    	cout << " ReleaseMutex thread effectué\n\n" ;
        return 3;
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	HANDLE hThread[1];
    	unsigned long ThreadId;
    	cout << "\n\n\ncreation de mutex(CreateMutex)" << endl;
    	mut=CreateMutex(NULL,FALSE,(LPCWSTR)"mutex");
            WaitForSingleObject(mut,INFINITE);
    	cout << "main: creation de 1 threads (CreateThread) avec mutex" << endl;
    	hThread[0] = CreateThread(NULL,NULL,Thread_mutex,NULL, NULL, &ThreadId);
    	cout << "ID1 : " << ThreadId << "\n" << endl;
    	cout << "attente de tout les threads (WaitForMultipleObjects)" << endl;
    	WaitForMultipleObjects(1, hThread, TRUE, INFINITE);
    	cout << "fermeture mutex(CloseHandle)" << endl;	
            CloseHandle(mut);
    	cout << "fin" << endl;
    	system ("pause");
    	return 0;
    }
    Et voici le code du second programme.
    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
     
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
     
    using namespace std;
     
    HANDLE mut;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	cout << "\n\n\ncreation de mutex(CreateMutex)" << endl;
    	mut=CreateMutex(NULL,FALSE,(LPCWSTR)"mutex");
    	cout <<  " ReleaseMutex thread \n"  ;	
    	ReleaseMutex(mut);
    	system ("pause");
    	return 0;
    }
    Et sa fonctionne pas !
    Est-ce que mon résonnement et bon ? et ou est les problème des mon code pour que sa fonctionne pas ??

    merci d'avance
    lermit

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il me semble que les mutex sont partageable uniquement dans un même programme.Si tu veux synchroniser 2 programmes différents il te faut utiliser les sémaphores nommées.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 36
    Par défaut
    ok merci
    s'est bien avec une sémaphores au lieu d'un mutex

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par lermit
    ok merci
    s'est bien avec une sémaphores au lieu d'un mutex
    Oui.

    Mutex/section critique->synchronisation inter-thread
    Semaphore->synchronisation inter-processus

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    non
    à la différence des CriticalSections, on peut partager l'accés à une même ressource avec 2 progs en utilisant des mutex.
    ce qui n'est pas forcément les synchroniser.

    Pour ça voir les event.
    http://msdn2.microsoft.com/en-us/aa915030.aspx

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    un event ce n'est pas un mutex, ce sont 2 objets différents.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Ca fonctionne exactement pareil, avec un nom l'identifiant.

    A handle to the event object indicates success. If a named event object exists before a function call to CreateEvent, the function returns a new handle to the same object, and GetLastError returns ERROR_ALREADY_EXISTS. Both handles must be closed. The two handles refer to the same event, so that calling SetEvent on one of the events is equivalent to calling SetEvent on the other. The handle value is different. This behavior is the same as the behavior on a Windows-based desktop platform.
    ...

    Multiple processes can have handles of the same event object, enabling use of the object for interprocess synchronization. The following object-sharing mechanism is available: a process can specify the name of an event object in a call to the CreateEvent function.

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il va me falloir me dire où tu vois qu'un mutex est un event en tout cas cela ne fonctionne pas de la même façon.

    Mais tu as raison on peut utiliser OpenMutex comme on peut utiliser OpenSemaphore.
    Le premier programme a l'air bon alors, il faudrait par contre appeler OpenMutex pour récupérer un handle dessus.Donc un process crée le mutex (CreateMutex) et le second l'ouvre (OpenMutex) (quoique avec les flags il serait ossible d'utiliser CreateMutex pour ouvrir un mutex aussi)

    Sous linux ca se complique peut être un peu je ne trouve pas comment on pourrait partager un mutex entre plusieurs process

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Salut,

    heu ... sous Linux, là je sais pas trop
    Effectivement si c'est pour Linux, je vais pas m'avancer (Moi c'était du Win32 ou MFC pour lesMutex ou CMutex).

    Donc un process crée le mutex (CreateMutex) et le second l'ouvre (OpenMutex) (quoique avec les flags il serait ossible d'utiliser CreateMutex pour ouvrir un mutex aussi)
    Ouais je dirai plutot que les 2 le créent avec CreateMutex, et aprés chaque s'amuse avec OpenMutex et ReleaseMutex


    Il va me falloir me dire où tu vois qu'un mutex est un event en tout cas cela ne fonctionne pas de la même façon.
    Non non j'ai jamais dit que c'était pareil, mais qu'on pouvait l'utiliser d'une manière similaire.
    Mais là aussi c'est pour du Windows queje donnais ma réponse.
    Avec CreateEvent() --> similaire à CreateMutex()
    et SetEvent / ResetEvent --> similaire à OpenMutex / ReleaseMutex

  10. #10
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu peux utiliser CreateMutex dans les 2 programmes mais il ne faut pas créer 2 mutex différents.


    et SetEvent / ResetEvent --> similaire à OpenMutex / ReleaseMutex
    Là je ne te suis pas.

    ReleaseMutex va libérer 1 et 1 seul thread bloqué à la fois contrairement aux events qui selon le mode (auto/manu) où tu pourras débloquer 1 ou n threads.(tu oublies PulseEvent) ce qui me fait dire qu'un mutex n'est pas un event et vice-versa

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intérraction de différents programmes entre eux
    Par Steider dans le forum Général Python
    Réponses: 6
    Dernier message: 12/02/2014, 09h43
  2. Réponses: 14
    Dernier message: 13/11/2007, 19h46
  3. Soustraire des éléments de tableau entre eux
    Par syl2095 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/01/2005, 15h29
  4. 2 SELECT Qui ne s'entendent pas très bien entre eux :(
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/08/2004, 16h46
  5. [File Maker Pro] Compatible entre eux ?
    Par dudu05 dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 06/05/2004, 08h42

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