Здравствуйте, mr_trwister, Вы писали:
_>ага! каждая новая overlapped будет увеличивать счетчик, а ее удаление будет уменьшать. останется только потокобезопасность предусмотреть.
InterlockedIncrement/InterlockedDecrement, например.
_>что же получается — после закрытия handle удалять объект, если ссылок на него больше нет.
Нет, не удалять, а уменьшать счетчик на единицу. Счетчик при создании ставить в 1.
_>а если есть, то оставить на откуп потоку в IOCP, чтобы последняя OVERLAPPED операция проверила счетчик и удалила?
Не последняя. Перед началом любой операции увеличиваешь счетчик, по поступлению уведомления уменьшаешь. По достижению счетчиком нуля удаляешь объект. Специальный случай — невозможность начать операцию (вызов I/O вернул ошибку, и код ошибки не IO_PENDING). В этом случае надо уменьшить счетчик сразу, т.к. уведомления не будет.
_>или вообще периодически пробегать по списку handle и чистить?