Re: IOCP + CompletionKey - когда удалять объект?
От: Michael Chelnokov Украина  
Дата: 12.03.08 12:49
Оценка:
Здравствуйте, mr_trwister, Вы писали:

_>если использовать IOCP при обработке сокетов, то во многих примерах, в том числе и Jim Ohlund рекомендуют создать объект — структуру типа PER_HANDLE и ее адрес передавать в качестве CompletionKey при вызове CreateIoCompletionPort.

_>такой вопрос: а когда же удалять созданный объект?

Т.е. оно per-handle, то по закрытию этого handle.

_>что меня смущает — это то, что на один сокет может быть задействовано одновременно несколько асинхронных операций. если закрыть сокет, то GetQueuedCompletionStatus сработает несколько раз (для каждой операции). пока все overlapped не обработаются и не удалятся вроде бы как нельзя удалять эту PER_HANDLE.

_>а как отследить момент, что все операции по закрытому сокету закончились?

Проще всего — счетчиком.

_>неужели безопасно через CompletionKey передавать только простые значения, которые помещаются в PULONG_PTR ?


Ядру плевать, что ты там передаешь. Но ты сам-то как отличишь указатель на живой объект от указателя на уже удаленный?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.