Как работает перекрывающийся / асинхронный ввод-вывод - PullRequest
0 голосов
/ 11 апреля 2011

Предположим, у меня есть что-то вроде этого

readFile(.....&ol) //with overlapped

while(1){

////////.....
waitforsingleobject(//ol.hevent);

////

readfile(.....&ol)

}

Я заметил, что оба файла чтения читаются с начала файла ... почему? В обычном файле чтения без перекрытия / асинхронизации второй файл чтения начинался бы там, где заканчивался первый.

1 Ответ

1 голос
/ 11 апреля 2011

При использовании перекрывающегося ввода-вывода для файла вы передаете указатель на объект OVERLAPPED, в данном случае ol.

Структура OVERLAPPED имеет две переменные, Offset и OffsetHigh. Эти две переменные объединяются в 64-разрядное целое число: Offset - это DWORD младшего разряда, а OffsetHigh - это DWORD старшего разряда и используется в качестве смещения для выполнения операции ввода / вывода при.

Так, например, если вы хотите начать ReadFile с 8-го байта файла, вы должны установить переменную Offset равной 8, а переменную OffsetHigh равной 0, прежде чем передать OVERLAPPED ReadFile.

...