-
> При записи файла размером 200м возникает не ловкая пауза > перед пользователем
Чтобы она была "ловкая", нужно как минимум оживить UI, согласен ? Сделать это можно любым из двух способов - вынос операции (блокирующей или неблокирующей - неважно) в доп.процесс/доп.поток или запуск операции в UI-потоке в асинхронном неблокирующем режиме. Последнее реализуется как раз с использованием overlapped i/o механизма.
Прогресс-нотификация же - это совсем другая (и весьма нетривиальная по ряду важных причин) задача, напрямую не связанная с i/o-режимами.
Win32API предлагает единственную функцию, предоставляющую интерфейс прогресс-нотификации - CopyFileEx. Но если посмотреть на ее "внутренности", то там можно увидеть то самое блочное чтение/запись, от которых ты пытаешься уйти. И уйти по непонятным мне пока причинам, ибо ничто не мешает использовать блоки более крупного размера, нежели 0,5К
-
Реализовал следующим способом 1. Убедился что файл действительно большой 2. Запускаю пробную запись(чтение) отследил время 3. Ну а потом действительно твоя помощь в цикл к варианту WAIT_TIMEOUT добавил расчет положения прогресса (формулу определения дальности еще не отменили) В случае с WAIT_OBJECT_0 позиция прогресса = 100 (Ух ты высокое методическое мастерство позволило завершить процесс записи/чтения несколько быстрее чем ожидалось). Все спасибо, вопрос закрываю.
-
Фигня это, а не прогресс. В топку его. Любое изменение в общесистемных условиях выполнения операции приведет к обрушению этого карточного домика по самый фундамент.
Уж лучше честную липу показать юзеру - анимашку какую-нить.. Главное чтобы не скучал)
-
> в цикл к варианту WAIT_TIMEOUT добавил расчет положения
Это называется "К соседу за спичками через Северный полюс". По сути мощь и возможности wait-функции сводятся до использования в качестве банального таймера.
|