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++/CLI Discussion :

GetAsyncKeyState & ContextSwitchDeadlock


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut GetAsyncKeyState & ContextSwitchDeadlock
    Bonjour à tous,

    pour les besoins de mon programme, je dois utiliser la fonction GetAsyncKeyState pour récupérer les touches pressées sur le clavier. Pour cela, j'execute dans un thread, le code suivant :

    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
     
     
            public void Run()
            {
                thdMain = new Thread(new ThreadStart(RunThread));
                thdMain.Start();
            }
     
            public void Abort()
            {
                thdMain.Abort();
            }
     
            private void RunThread()
            {
     
                    while (true)
                    {
                        int i = 0;
                        for (i = 1; i < Byte.MaxValue; i++)
                        {
                            if (GetAsyncKeyState(i) == Int16.MinValue + 1)
                            {
                                KeyPressArgs KeyPressInfo = new KeyPressArgs(Control.ModifierKeys, i);
                                OnKeyPress(KeyPressInfo);
                            }
                        }
                    }
     
            }
    C'est un code que j'ai récupéré depuis internet puis adapté à mes besoins.

    Le souci est qu'au bout de 60 secondes, un exception du type ContextSwitchDeadlock est générée. Je n'arrive pas à contourner ce problème de manière simple et propre.

    Avez vous une idée à me suggérer pour passer outre ce problème?

    Je vous remercie

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ce n'est pas DU TOUT comme ca qu'il faut faire
    tu as une boucle infinie qui n'a meme pas le temps de respirer
    Pourquoi utiliser GetAsyncKeyState et pas simplement les événements de ta form/controle ou autre ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut
    En fait, mon programme doit intercepter une combinaison de touches pressées et effectuer un certain traitement. La difficulté provient du fait que je dois détecter cette combinaison qu'elle soit effectuer dans ma fenêtre ou dans une autre.

    Je dois effectuer cette détection dans un thread séparé. J'ai donc décidé de tester l'utilisation de cette fonction mais s'il existe une solution plus stylée et "moins bombe nucléaire", je l'accepte les bras ouvert?!

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    j'aurai plutot regardé du coté de la faq http://dotnet.developpez.com/faq/cpp...hortcutkeyform
    ou bien de RegisterHotKey (http://msdn.microsoft.com/en-us/library/ms646309.aspx)

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

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