[win32]Использование файлов с FILE_FLAG_OVERLAPPED

Andbar

1.
В структуре OVERLAPPED есть поля, указывающие на позицию. Можно ли указать позицию файла, с которой необходимо начать файловую операцию в данной структуре вместо вызова SetFilePointer перед вызовом ReadFile/WriteFile?
2.
Как я понял из документации, в поле hEvent структуры OVERLAPPED необходимо до вызова файловой операции записать NULL, либо хэндл Event'а. В документации к GetOverlappedResult написано:
If the hEvent member of the OVERLAPPED structure is NULL, the system uses the state of the hFile handle to signal when the operation has been completed. Use of file, named pipe, or communications-device handles for this purpose is discouraged. It is safer to use an event object because of the confusion that can occur when multiple simultaneous overlapped operations are performed on the same file, named pipe, or communications device. In this situation, there is no way to know which operation caused the object's state to be signaled.
Я открываю каждый файл в отдельном потоке и обращаюсь к файлу только с потока, в котором он был открыт. Однако в документации к WaitForSingleObject про возможность указания файлового хэндла в качестве объекта ничего не указано. Можно ли так делать?

evgen5555

Юзать event'ы религия не позволяет?

yolki

да походу асинхронность пугает

Andbar

Юзать event'ы религия не позволяет?
Это, во-первых, лишние ресурсы (по одному хендлу на поток, а потоков может быть с полтора десятка плюс три строчки кода.

tima56

Как я понимаю, тебе нужен GetOverlappedResult с последним параметром в TRUE.
А в структуре позицию в файле указывать не только можно, но и нужно.

kokoc88

Это, во-первых, лишние ресурсы (по одному хендлу на поток, а потоков может быть с полтора десятка
Такие задачи решаются через тред пулы, IO Completion.

Andbar

Как я понимаю, тебе нужен GetOverlappedResult с последним параметром в TRUE.
а таймаут, ради которого я и использую FILE_FLAG_OVERLAPPED? Если его не использовать, то можно обойтись синхронным чтением.
Оставить комментарий
Имя или ник:
Комментарий: