Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.190.167] |
|
Сообщ.
#1
,
|
|
|
здравствуйте,
в инете написано, что мол написал CreatFile + WriteFile и забудь. ОС сама справится с контролем. У меня прога собирает данные с АЦП, и иногда непредсказуемо зависает. Опытным путем выяснил, что начинается новый цикл сбора данных, хотя предыдущие еще не записаны. Мало того бывает, что не записаны файлы 2-3 цикла назад! И все же, есть какой-нибудь способ дождаться пока файл на жесткий диск не запишется? Спасибо. |
Сообщ.
#2
,
|
|
|
Цитата antpu238 @ в инете написано, что мол написал CreatFile + WriteFile и забудь. ОС сама справится с контролем. А "CloseHandle" не пробовал делать ? Добавлено Цитата antpu238 @ И все же, есть какой-нибудь способ дождаться пока файл на жесткий диск не запишется? Можно сделать, как бы, наоборот. Смастери класс, посредством которого будешь спасать данные в файл. Сделаем там буфер. Для записи испльзуем метод этого класса. Алгоритм приблизительно такой: - если буфер ещё не заполнен до конца, последовательно пишем в буфер. - подсчитываем всё ещё свободное место в буфере. - как только свободного места больше не останется, сбрасываем содержимое буфера в файл - Продолжаем последовательно записывать данные в буфер теперь уже сначала. итд итп. Эффективность записи в файл большими порциями получится существенно выше. --- Процедура, использующая запись в файл, вообще не будет (и не должна) знать, когда данные будут записываться в файл, а когда - в буфер. |
Сообщ.
#3
,
|
|
|
ЫукпШ CloseHandle использую сразу же после WriteFile.
Над вторым методом завтра буду думать. Спасибо. |
Сообщ.
#4
,
|
|
|
Сообщ.
#5
,
|
|
|
я конечно не особо в виндовом API разбираюсь, но lpNumberOfBytesWritten на выходе совпадает с nNumberOfBytesToWrite?
|
Сообщ.
#6
,
|
|
|
Сейчас, погоди. Не думаю, что проблема собственно в буферизированной записи (её, к слову, можно решить выставлением флагов FILE_FLAG_NO_BUFFERING и FILE_FLAG_WRITE_THROUGH в CreateFile). Есть у меня сильное подозрение, что читаешь с устройства и пишешь ты в разных потоках. И, вероятнее всего, напортачил с синхронизацией. Расскажи, для начала, как ты снимаешь данные с устройства и передаешь на запись в файл?
|