Si je crée un événement en utilisant CreateEvent
dans Windows, comment puis-je vérifier si cet événement est signalé ou s'il n'utilise pas le débogueur dans Visual Studio? CreateEvent
renvoie un handle, ce qui ne me donne pas accès à beaucoup d'informations. Avant d'appeler le WaitForSingleObject()
, je veux vérifier si l'événement est signalé avant d'entrer dans la fonction.Débogage avec des événements dans Windows
Répondre
Si l'événement est signalé et que vous utilisez WaitForSingleObject(), il retournera immédiatement. En outre, vous pouvez appeler WaitForSingleObject() avec un temps d'attente de 0 pour déterminer si elle est signalée ou non. Cependant, cela ne devrait pas être nécessaire - définissez l'état initial dans l'appel CreateEvent() (ce qui s'est écoulé jusqu'ici n'est pas clair dans votre question).
Vous pouvez utiliser l'outil Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) pour vérifier manuellement l'événement en dehors du débogueur. Cela aide si l'événement est nommé, afin que vous puissiez le trouver plus facilement.
Utilisez la commande handle. Voici un exemple
La commande suivante affiche des informations détaillées sur le handle 0x8.
0:000> !handle 8 f
poignée 8 Type d'événement Attributs 0 GrantedAccess 0x100003: Synch QueryState, ModifyState HandleCount 2 PointerCount 3 Nom objet Informations spécifiques Type d'événement Auto Reset événement est Waiting
Remarque que cette commande est pour les outils de débogage pour Windows (WinDbg/ntsd/cdb/kd), pas Visual Studio. DTW est à http://www.microsoft.com/whdc/devtools/debugging/default.mspx – bk1e
@ bk1e: C'est vrai. Cependant, il est également possible [d'utiliser le moteur de débogage Windows de Visual Studio] (http://stackoverflow.com/q/3438489/1889329), ainsi la commande d'extension '! Handle' est également disponible dans Visual Studio. – IInspectable