2010-09-27 2 views
0

J'ai un problème ici et j'ai besoin de votre aide. J'ai essayé de capturer les traits du clavier à partir d'une fenêtre créée en utilisant la fonction cvWaitKey(). La fonction fonctionne très bien si je l'appelais cvWaitKey du même thread qui a créé la fenêtre, mais quand je crée la fenêtre d'un fil et appelle cvWaitKey() d'un autre thread, il ne retourne pas la bonne clé, il bloque pour cvWaitKey (0) et renvoie -1 pour tout délai d'attente supérieur à zéro.OpenCV: Comment utiliser cvWaitKey() forme un autre thread que celui créé la fenêtre?

Répondre

1

Oui, cela ne peut pas fonctionner. cvWaitKey() est implémentée en appelant la fonction API PeekMessage(). Cela peut uniquement voir les messages dans la file d'attente de messages associée au thread. Le thread que vous avez créé n'a aucune fenêtre.

Il n'y a pas de solution évidente pour cela, vous devez appeler sur le fil qui a créé la fenêtre. Appeler GetAsyncKeyState() pourrait fonctionner, une approche très différente cependant.

+0

Merci Hans pour votre réponse. Je serais reconnaissant de bien vouloir vous expliquer plus en détail comment surmonter une telle situation à l'aide GetAsyncKeyState() –

+0

while (GetAsyncKeyState (VK_ESCAPE)> = 0) Sommeil (50); –

0

Dans votre "autre" thread, vous pouvez définir une variable partagée à true ou false (ou une valeur) et faire le "thread de fenêtre" le vérifie avant de décider d'appeler cvWaitKey() dans sa portée locale.

Questions connexes