2013-03-08 4 views
1

En lisant les commentaires de another question, je vois qu'il y a un risque de rencontrer des conditions de concurrence lors de l'utilisation de la méthode API Windows GetWindowThreadProcessId. Quelle est la taille d'un risque? Permettez-moi de fournir des informations générales sur ce que je tente de faire. J'écris une application de chronométrage en C# pour mon usage personnel. Mon intention était de faire en sorte que l'application détecte (via les appels API Win) quand la fenêtre active a changé afin que je puisse enregistrer l'heure sur l'application utilisée. J'ai déjà localisé le code qui détecte quand la fenêtre active change; Maintenant, j'essaie de déterminer le processus associé à cette fenêtre. J'ai trouvé plusieurs messages sur SO qui pointent verscomme solution, mais comme je l'ai mentionné, il semble y avoir un problème potentiel à l'utiliser. Si GetWindowThreadProcessId n'est pas un moyen sûr d'aller, alors je suis ouvert à d'autres alternatives. Mon espoir était de garder le code entièrement en C#, mais je ne suis pas (complètement) opposé à déplacer des parties de celui-ci en C/C++ si nécessaire.GetWindowThreadProcessId Condition de course Risque

Merci!

Répondre

3

La course est incontournable. Il n'y a pas d'API capable de faire ce que vous voulez.

Mais c'est une course plutôt bénigne. Qu'est-ce qui peut mal tourner? La fenêtre est fermée juste avant de poser des questions à ce sujet. Vous obtenez donc une erreur, puis réessayez. Tout ce que vous devez faire est d'être conscient de la condition de course et de vérifier et de gérer les erreurs avec élégance.

+0

Honnêtement, c'est ce que je pensais. Un hWnd ne change pas tant que la fenêtre reste ouverte, correct? Si oui, alors je pense que la seule fois où je devrais être préoccupé par cela lors de la fermeture d'une fenêtre. –

+1

Oui, c'est vrai. Manipulez bien les erreurs et ce n'est pas un problème. Windows s'efforce d'éviter de réutiliser les poignées. Vous n'aurez aucun problème. –

Questions connexes