GetQueuedCompletionStatus()
dequeue une notification d'achèvement, mais ne renvoie pas le type de notification (par exemple, une notification de lecture, une notification d'écriture).Pourquoi GetQueuedCompletionStatus() ne retourne pas le type d'opération?
Il est de ma responsabilité de garder une trace de ce que les opérations je lance, par exemple quand j'utilise WSARecv()
, ajouter un drapeau à la structure OVERLAPPED
qui indiquent quelle opération c'est (lire dans ce cas), et quand je DEQUEUE une notification, j'ai lu ce drapeau. Est-ce que quelqu'un sait pourquoi GetQueuedCompletionStatus()
ne retourne pas le type d'opération?
Parce que vous êtes censé garder la trace de vous-même. Le pointeur que vous récupérez est votre clé. Il est courant de dériver votre propre structure de OVERLAPPED pour stocker tout contexte supplémentaire. –
Ce n'est pas l'affaire de 'GQCS' que l'opération était réellement. C'est à toi de voir**. Il doit être géré comme tel (dans le cadre de votre état per-IO, généralement via une extension de la structure OVERLAPPED). La programmation IOCP pour les E/S réelles (vous pouvez également les utiliser sans E/S) est une programmation de type machine-état, où ** vous ** gérez cet état. – WhozCraig