В моем проекте мне нужно читать и писать в последовательный порт (RS232). Я использую перекрывающийся ввод-вывод и использую два отдельных потока для чтения и записи.
Когда я запускаю операцию записи, которая не завершается немедленно, я начинаю ждать (WaitForMultipleObjects) двух событий; событие, назначенное члену hEvent перекрывающейся структуры, и событие остановки. Когда я хочу остановить поток, я сигнализирую о событии остановки, вызывая SetEvent (). Это приводит к возврату функции ожидания. Поскольку операция записи все еще не завершена, я отменяю операцию, вызывая CancelIO (). Опять же, я жду завершения операции, теперь использую GetOverlappedResult () с параметром bWait, установленным на True. Когда операция завершается, GetOverlappedResult () возвращает False, а GetLastError () возвращает ERROR_OPERATION_ABORTED.
А теперь вопрос:
Когда GetOverlappedResult () возвращает False, а GetLastError () возвращает ERROR_OPERATION_ABORTED (указывает на завершенную, но отмененную операцию), действителен ли параметр lpNumberOfBytesTransfer? Другими словами, дает ли lpNumberOfBytesTransfer фактическое количество записанных байтов до его отмены? Или в этом случае параметр lpNumberOfBytesTransfer не определен?