2015-02-25 1 views
1

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?

+1

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. –

+1

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

Répondre

1

Pourquoi s'en soucier? Vous pouvez passer des données utilisateur à travers les API qui résultent en une extraction en cours d'extraction via GetQueuedCompletionStatus() alors pourquoi avez-vous besoin d'autre chose? Comme vous pouvez poster vos propres complétions en utilisant PostQueuedCompletionStatus() il y a un nombre infini de « opérations » que vous pouvez compléter, donc passer dans la structure « OVERLAPPED étendue et vous pouvez passer quoi que ce soit ...

Si vous pouvez passer votre séparé flag alors cela ne supprimera pas la nécessité de passer des choses supplémentaires comme une structure OVERLAPPED étendue car il est très utile de pouvoir passer le tampon de données et d'autres informations avec l'opération de toute façon, donc un drapeau supplémentaire est peu probable Ayant ... Mes conceptions ont besoin de plus que vos conceptions ont besoin, ainsi laissons juste faire face à la méthode que les concepteurs d'API nous ont donné ...