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 :

Process handler et classes en C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par d�faut Process handler et classes en C++
    Bonjour
    Je cherche � cr�er une librairie/API en C++ pour cr�er des process dont l'ex�cution sera pilot�e par d'autres processus via des signaux. Je veux pouvoir lancer plusieurs processus et les arr�ter ind�pendamment.

    J'utilise la fonction suivante : signal(SIGUSR1, CaptureProcess::handler) qui est issue de l'API C standard, pour assigner un handler � la r�ception d'un signal.
    Cet handler est ensuite sens� aller modifier les attributs d'une classe ce qui influera sur l'ex�cution des fonctions de celle-ci.

    Il semble que ce handler ne puisse malheureusement pas �tre d�finie autrement que par une m�thode statique dans la classe.
    Cela pose un probl�me dans la mesure o� cela m'emp�che de piloter l'ex�cution de chaque thread ind�pendamment car je ne peux pas acc�der � des attributs de la classe qui ne soit pas statique.

    Est-il possible d'assigner une m�thode de ma classe comme handler via la fonction signal (ou une autre m�thode) ?

    Une autre solution consisterai � cr�er une structure de donn�es statique (via un vector par exemple) qui contiendrait l'ensemble des processus de conna�tre leur �tat courant. Chaque processus irait alors lire son �tat dans dans cette structure et piloterai son ex�cution en cons�quence. Cette solution me semble cependant un peu lourde � mettre en place en particulier au niveau du contr�le de l'acc�s concurrent � cette structure de donn�e.

    Mes questions sont donc : existe-t-il une solution � mon probl�me au niveau du handler ? et est-ce que ma seconde solution est viable ?

    Merci d'avance pour l'aide.

  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
    Essaie avec la fonction POSIX sigaction() plut�t que l'antique fonction standard signal().
    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 Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    De l'ext�rieur, tu ne peux pas adresser un thread particulier de ton process. Donc dans tous les cas, tu auras un thread "au pif" r�veill�...

    Plut�t que des signaux, ce qui est quand m�me super bas niveau et merdique, regarde du c�t� des IPC, ou de dbus.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par d�faut
    Citation Envoy� par white_tentacle Voir le message
    De l'ext�rieur, tu ne peux pas adresser un thread particulier de ton process. Donc dans tous les cas, tu auras un thread "au pif" r�veill�...

    Plut�t que des signaux, ce qui est quand m�me super bas niveau et merdique, regarde du c�t� des IPC, ou de dbus.
    Le but n'est pas de piloter des threads � l'int�rieur d'un autre process, mais plusieurs process � partir d'un seule et m�me autre process.
    Et dans ce cas, avec les pid, je peux parfaitement envoyer des signaux � un process en particulier.

    EDIT :
    Je viens juste de tenter d'utiliser sigaction et de la m�me fa�on que pour signal, on ne peut utiliser que des fonctions statiques.
    Cela ne r�sout pas vraiment le probl�me et ne fait que le d�placer.
    Merci quand m�me pour le conseil.

  5. #5
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Le but n'est pas de piloter des threads � l'int�rieur d'un autre process, mais plusieurs process � partir d'un seule et m�me autre process.
    Au temps pour moi, j'ai lu un peu trop en diagonale.

    Je maintiens quand m�me ce que j'ai dit, avec des signaux uniquement, tu vas beaucoup t'emmerder.

    Si tu ne veux pas passer par quelque chose d'aussi haut-niveau que dbus, regarde au moins du c�t� des IPC, c'est standard et quand m�me plus puissant que juste des signaux.

    Regarde aussi du c�t� de la shared memory (je pense � la liste des processus notamment, ce truc l� devrait �tre stock� dans une shared memory, sinon, tu es � peu pr�s s�r qu'elle va se d�synchroniser entre tes diff�rents processus).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par d�faut
    En fait, mes besoins sont tr�s basiques : dans un premier temps, je veux juste piloter l'arr�t de chaque processus individuellement, dans un second temps, je voudrais aussi modifier quelques param�tres dans le fonctionnement des processus.

    Je pr�f�re effectivement eviter l'utilisation d'une API trop haut-niveau car j'ai un gros besoin de rapidit� aux niveau des process cr�es.

    Le plus adapt� semble donc �tre une shared memory avec un s�maphore qui g�re son acc�s, les deux �tant des attributs static de ma classe.
    La shared memory contiend un vector avec pour chaque pid, diff�rentes valeurs indiquant son �tat ou certains param�tres. Les processus vont ensuite chacun v�rifier leurs �tats/leurs param�tres dans la shared memory.
    Les processus acc�dent ensuite � leur pid via une fonction comme getpid() de l'API C standard. Et en utilisant ce pid, ils actualisent leur �tat/leurs param�tres via la shared memory.
    On peut �ventuellement concevoir que cette actualisation d'�tat/param�tre se fait sur r�ception d'un signal. Mais dans ce cas-l�, on retombe sur la premi�re question de mon premier post.
    Si on utilise pas de signal, cela oblige � faire une v�rification p�riodique qui ne sera pas tr�s efficace.

    Est-ce que ce sch�ma de fonctionnement vous semble viable ?

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Je pr�f�re effectivement eviter l'utilisation d'une API trop haut-niveau car j'ai un gros besoin de rapidit� aux niveau des process cr�es.
    Les IPC, c'est quand m�me tr�s rapide, �a utilise de la shared memory derri�re. �ventuellement, tu peux regarder du c�t� de MPI aussi (au d�part fait pour faire du calcul distribu�). Tr�s rapide aussi.

    Est-ce que ce sch�ma de fonctionnement vous semble viable ?
    Si on exclut le fait que tu ne peux pas mettre un vector en shared memory, et donc que tu devras g�rer ton propre tableau de processus, �a me semble viable.

    Si on utilise pas de signal, cela oblige � faire une v�rification p�riodique qui ne sera pas tr�s efficace.
    Il me semble bien que tu peux utiliser des condition variables inter-process pour �viter les signaux.

Discussions similaires

  1. Probl�me avec la class Process et le CMD.EXE
    Par Thoustra dans le forum D�buter avec Java
    R�ponses: 0
    Dernier message: 26/11/2010, 14h27
  2. Utilisation de la classe Process
    Par laedit dans le forum Framework .NET
    R�ponses: 3
    Dernier message: 05/03/2010, 22h14
  3. R�cup�rer une classe reli�e � un Handler
    Par hedisurfer dans le forum Windows Forms
    R�ponses: 10
    Dernier message: 09/01/2010, 00h05
  4. Pr�cisions sur la class Process et la m�thode waitFor()
    Par Pierre.B dans le forum G�n�ral Java
    R�ponses: 13
    Dernier message: 28/08/2009, 16h51
  5. [Custom Tags 1.2] [JBoss] "unable to load class handler."
    Par coyote999 dans le forum Taglibs
    R�ponses: 5
    Dernier message: 23/01/2008, 22h27

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