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

API, COM et SDKs Delphi Discussion :

Envoi de signaux comme sous linux ( kill(t_pid,integer) )


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut Envoi de signaux comme sous linux ( kill(t_pid,integer) )
    Bonsoir à tous,

    Ma question est simple :

    est-il possible sous Windows (et surtout comment ?) d'envoyer un signal à un thread en cours d'exécution pour qu'il cesse alors tout ce qu'il était en train de faire (par exemple attendre indéfiniment un sémaphore) afin d'exécuter une procédure donnée ?

    L'équivalent du kill en C sous Linux ....




    Par avance merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    TerminateThread A utiliser avec précaution ... c'est l'aide qui le dit !

  3. #3
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    TerminateThread A utiliser avec précaution ... c'est l'aide qui le dit !
    Effectivement ça a l'air un peu brutal ...




    Je vais voir si je peux pas trouver un autre moyen ...

    et dans un cas plus général ? Parce que là par exemple c'est pour arrêter le thread ... mais si j'avais voulu créé le système d'alarme ... comment on aurait fait sous windows ?


    Merci pour ton aide,

  4. #4
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Pour contourner le problème j'ai quelque peut modifié la classe TSemaphore fournie ici dans ce tutoriel.
    Clairement, j'ai modifié la méthode P comme suit :
    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
     
    interface
    ...
    function P(tempsAttente: dword = INFINITE ): dword;
    ...
    implementation
    ...
    function TSemaphore.P(tempsAttente: dword): dword;
    begin
      result := WAIT_OBJECT_0;
      while (FValeur < 1) and not(result=WAIT_TIMEOUT) do
      begin
        result := WaitForSingleObject(FHSemaphore, tempsAttente);
      end;
      if result=WAIT_OBJECT_0 then FValeur := FValeur - 1;
    end;
    et dans mon code j'ai donc ma fonction execute comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TThreadTraitementImages.Execute;
    begin
      while not(Terminated) do
      begin
          while (fSemImagesPretes.P(TEMPS_ATTENTE_SEMAPHORE)=WAIT_TIMEOUT) do           // On attend de réussir à se servir dans le sémaphore
          begin
            if Terminated then exit;
          end;
          // Mon traitement normal ...
          ....
    Ca à l'air de fonctionner




    Cela dit, je laisse le post non résolu, comme ça si quelqu'un sait comment envoyer des signaux (si c'est possible ????? ) sous Windows ...



    Merci à tous,

Discussions similaires

  1. java comm sous linux
    Par eclipselinux dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 09/03/2009, 17h32
  2. animation au demarrage comme sous linux
    Par canary dans le forum Langage
    Réponses: 24
    Dernier message: 03/01/2008, 17h41
  3. [SOLARIS] Accentuation comme sous Linux
    Par Nick_Holmes dans le forum Solaris
    Réponses: 5
    Dernier message: 02/06/2006, 14h42
  4. Réponses: 3
    Dernier message: 29/12/2005, 15h43
  5. [Système] lancer / kill une application sous linux
    Par Antoine NSG dans le forum Langage
    Réponses: 1
    Dernier message: 31/10/2005, 16h06

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