Книга: Системное программирование в среде Windows
Пример: использование дескриптора файла в качестве объекта синхронизации
Пример: использование дескриптора файла в качестве объекта синхронизации
Перекрывающийся ввод/вывод очень удобно и просто реализуется в тех случаях, когда может существовать только одна незавершенная операция. Тогда для целей синхронизации программа может использовать не событие, а дескриптор файла.
Приведенный ниже фрагмент кода показывает, каким образом программа может инициировать операцию чтения для считывания части файла, продолжить свое выполнение для осуществления других видов обработки, а затем перейти в состояние ожидания перехода дескриптора файла в сигнальное состояние.
OVERLAPPED ov = { 0, 0, 0, 0, NULL /* События не используются. */ };
HANDLE hF;
DWORD nRead;
BYTE Buffer[BUF_SIZE];
…
hF = CreateFile( …, FILE_FLAG_OVERLAPPED, … );
ReadFile(hF, Buffer, sizeof(Buffer), &nRead, &ov);
/* Выполнение других видов обработки. nRead не обязательно достоверно.*/
/* Ожидать завершения операции чтения. */
WaitForSingleObject(hF, INFINITE);
GetOverlappedResult(hF, &ov, &nRead, FALSE);
- Обзор методов асинхронного ввода/вывода Windows
- Перекрывающийся ввод/вывод
- Пример: использование дескриптора файла в качестве объекта синхронизации
- Пример: преобразование файлов с использованием перекрывающегося ввода/вывода и множественной буферизации
- Расширенный ввод/вывод с использованием процедуры завершения
- Пример: преобразование файла с использованием расширенного ввода/вывода
- Асинхронный ввод/вывод сиспользованием нескольких потоков
- Таймеры ожидания
- Пример: использование таймера ожидания
- Порты завершения ввода/вывода
- Пример: сервер, использующий порты завершения ввода/вывода
- Резюме
- Упражнения
- Пример установочного скрипта
- Пример из практики
- Восстановление с использованием инструмента gbak
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Типы страниц и их использование
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Использование констант
- Эффективная работа с временными файлами сортировки
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Примеры получения статистики