На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> как дождаться окончания процесса записи файла? , BCB 6.0 winXP
    здравствуйте,

    в инете написано, что мол написал CreatFile + WriteFile и забудь. ОС сама справится с контролем.
    У меня прога собирает данные с АЦП, и иногда непредсказуемо зависает. Опытным путем выяснил, что начинается новый цикл сбора данных, хотя предыдущие еще не записаны. Мало того бывает, что не записаны файлы 2-3 цикла назад!

    И все же, есть какой-нибудь способ дождаться пока файл на жесткий диск не запишется?

    Спасибо.
      Цитата antpu238 @
      в инете написано, что мол написал CreatFile + WriteFile и забудь. ОС сама справится с контролем.

      А "CloseHandle" не пробовал делать ?

      Добавлено
      Цитата antpu238 @
      И все же, есть какой-нибудь способ дождаться пока файл на жесткий диск не запишется?

      Можно сделать, как бы, наоборот.
      Смастери класс, посредством которого будешь спасать
      данные в файл.
      Сделаем там буфер.
      Для записи испльзуем метод этого класса.
      Алгоритм приблизительно такой:
      - если буфер ещё не заполнен до конца, последовательно пишем в буфер.
      - подсчитываем всё ещё свободное место в буфере.
      - как только свободного места больше не останется,
      сбрасываем содержимое буфера в файл
      - Продолжаем последовательно записывать данные в буфер теперь уже сначала.
      итд итп.
      Эффективность записи в файл большими порциями получится существенно выше.
      ---
      Процедура, использующая запись в файл, вообще не будет (и не должна) знать,
      когда данные будут записываться в файл, а когда - в буфер.
      Сообщение отредактировано: ЫукпШ -
        ЫукпШ CloseHandle использую сразу же после WriteFile.

        Над вторым методом завтра буду думать. Спасибо.
        Сообщение отредактировано: antpu238 -
            я конечно не особо в виндовом API разбираюсь, но lpNumberOfBytesWritten на выходе совпадает с nNumberOfBytesToWrite?
              Сейчас, погоди. Не думаю, что проблема собственно в буферизированной записи (её, к слову, можно решить выставлением флагов FILE_FLAG_NO_BUFFERING и FILE_FLAG_WRITE_THROUGH в CreateFile). Есть у меня сильное подозрение, что читаешь с устройства и пишешь ты в разных потоках. И, вероятнее всего, напортачил с синхронизацией. Расскажи, для начала, как ты снимаешь данные с устройства и передаешь на запись в файл?
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0227 ]   [ 16 queries used ]   [ Generated: 25.04.24, 14:09 GMT ]