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 :

[SendMessage] Quel thread gère l'appel à la procédure ?


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut [SendMessage] Quel thread gère l'appel à la procédure ?
    Bonjour à tous,

    J'ai une question toute simple vis-à-vis de l'API SendMessage.

    Admettons deux trheads : Thread1 et Thread2. Thread1 fait un SendMessage dont le handle est celui de Thread2. Dans Thread2, on a donc une méthode pour récupérer les messages ...

    Qui exécute cette méthode ? Thread1 ou Thread2 ?


    Par avance merci

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

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Je viens de trouver ça sur MSDN de SendMessage :

    If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message.
    Dois-je en conclure que c'est Thread2 qui exécute ma fonction ?

  3. #3
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    je pense que oui.
    Si j'ai bien compris MSDN, ils disent (ce qui semble logique) que le thread1 fait le SendMessage, et passe donc en attente de la réponse (contrairement au postMessage qui est asynchrone). Ensuite, le thread2 est activé et traite le message. Une fois le message traité, la réponse est retournée au thread1 qui continue son exécution

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 090
    Par défaut
    Et normalement entre Thread, il faut utiliser PostThreadMessage ...
    Mais SendMessage fonctionne assez bien, je l'utilise depuis un Thread vers une Form dans le Thread Main, je ne l'ai jamais tenté entre Thread, et je confirme, c'est bloquant ...

    tu l'as écrite comment ton écoute de message ? via une WndProc pour utiliser la directive message ou via un WaitObject ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Merci pour vos réponses, c'est toujours mieux d'avoir plusieurs avis


    tu l'as écrite comment ton écoute de message ? via une WndProc pour utiliser la directive message ou via un WaitObject ?

    Je ne l'ai aps encore écrite ... euh ... en fait cette question avait deux rôles :
    1) comprendre le fonctionnement d'un objet que j'ai récupéré (je devais savoir quel thread s'occupait de faire le traitement)
    2) Pour un futur proche à venir mais en utiliser PostMessage ... Ou comme tu me le dis PostThreadMessage ... voir même (mais faut que je me renseigne avant) aprce que je pense que ça conviendrait ENCORE PLUS MIEUX les évènements ...


    Mais ça ce sera une autre longue histoire




    merci de m'avoir lu et aidé


    A très bientot

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

Discussions similaires

  1. Quels arguments pour appeler ma procédure
    Par meme que dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/02/2012, 18h51
  2. Appel de Procédure stockée en ASP
    Par James85 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/11/2004, 17h55
  3. Appel de procédure par contenu de variable
    Par lil_jam63 dans le forum Langage
    Réponses: 9
    Dernier message: 13/09/2004, 08h05
  4. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59
  5. Appel de procédure...
    Par AmaX dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2002, 17h48

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