Я пишу сервер для одного клиента (на данный момент), который имеет основной цикл, который обрабатывает клиентский запрос и отправляет соответствующий обработчик.
для некоторых целей я хотел бы использовать перекрывающийся ввод-вывод MS (только для окон).
в одном из них я хочу прочитать из файла и записать содержимое в сокет.
поскольку у меня есть класс Wrap для этого действия, он выделяет буфер, размер файла, а затем выполняется вызов ReadFile (с реальным файлом файловой системы), за которым следует WriteFile (на этот раз, дескриптору сокета). ) оба пчелы перекрываются.
проблема заключается в:
поскольку он асинхронный, класс d’tor вызывается автоматически, и буфер файла освобождается перед выполнением задания,
очевидно, это мой сломанный дизайн,
Я действительно хотел бы услышать ваше предложение,
Спасибо!
Глядя на документы, кажется, что вы хотите позвонить GetOverlappedResult
с bWait
быть установленным Это будет блокировать до завершения операции перекрытия.
Вы можете использовать мьютекс внутри асинхронных функций и внутри деструкторов.
Может создать поток, который работает в фоновом режиме, чтобы убедиться, что ввод-вывод файла все еще требуется, и оставить класс файла открытым (даже если это просто цикл для продолжения ожидания). Таким образом, сокет может делать то, что ему нужно, и IO может непрерывно (через флаг, установленный в переменной-члене класса) держать его в курсе своего статуса.
Затем в деструкторе проверьте, разблокирован ли он и готов ли, в противном случае — еще один цикл остановки.
Спасибо всем,
Похоже, я что-то упустил, поскольку использование другого потока для проверки или просто ожидание завершения, похоже, утрачено из-за преимуществ асинхронного ввода-вывода.
Я предполагаю, что то, что я ищу, это метод использования, который MS планировал использовать разработчиками.