2010-11-17 3 views
7

Est-ce que WaitForSingleObject (ou WaitForMultipleObjects) provoquera un changement de contexte lors de l'attente d'un événement avec un délai d'attente de zéro? (Sleep(0) produira immédiatement une tranche de temps de threads autant que je sache.)Est-ce que WaitForSingleObject provoquera un changement de contexte lors de l'attente avec un délai d'attente de zéro?

Maintenant, en ce qui concerne WaitForSingle|MultipleObject et les poignées d'événement. Si WaitFor * Object doit attendre, il va de soi que le reste de sa tranche de temps sera généré. Cependant, il y a deux cas où l'API ne pas besoin d'attendre:

  • Soit l'événement est signalé, auquel cas il peut revenir avec WAIT_OBJECT_0
  • ou l'état de l'événement n'a pas d'importance comme je l'ai spécifié un temps d'attente de zéro, auquel cas il peut retourner immédiatement, soit avec WAIT_OBJECT_0 ou WAIT_TIMEOUT

maintenant, compte tenu de cela, va WaitForSingleObject provoquer un changement de contexte de fil si un délai de temporisation de zéro est fourni?

Répondre

4

Basé sur le noyau de recherche Windows et un peu de reverse-engineering de KeWaitForSingleObject, la réponse est no. En regardant le WRK, l'heure de la temporisation interne est vérifiée avant d'appeler KiSwapThread, en s'assurant que la fonction retourne immédiatement si l'objet n'est pas signalé.

3

Maintenant, il semble que je sorte de trouvé une réponse en écrivant la question - voici ce que je suppose des documents disponibles:

Les MSDN énonce ce qui suit:

dwMilliseconds [en ]

L'intervalle de temporisation, en millisecondes. Si une valeur différente de est spécifiée, la fonction attend jusqu'à ce que les objets spécifiés soient signalés ou l'intervalle se soit écoulé. Si dwMilliseconds est zéro, la fonction ne passe pas en état d'attente si les objets spécifiés ne sont pas signalés; il revient toujours immédiatement. Si dwMilliseconds est INFINITE, la fonction est renvoyée uniquement lorsque les objets spécifiés sont signalés.

je prendrais cela implique qu'il aussi ne pénètre pas dans un état d'attente si les et j'interpréteraient sont signalaient objets « ne tombiez pas un état d'attente » comme « non changement de contexte se produit ".

Questions connexes