Принцип работы FileFlush()

 
Здравствуйте. Когда-то давно я видел разговор о том, что выполнение FileFlush() совсем не делает сброс в файл после выхода из функции. Мол операция долгая, публика неподготовленная, не дадим им стрелять себе в ногу и серьёзным образом снижать скорость выполнения mql кода.  В то же время документация этого не отражает. Но я ведь своими глазами видел такой разговор.

Вопрос: скидывается ли буфер в файл со 100% гарантией до выхода из функции FileFlush() ?
 
Вы можете это проверить самостоятельно
 
Нашёл поиском

Renat:
Да, фактически мы отключили сброс кешей по FileFlush, так как им почти никто не умеет пользоваться, убивает диск и производительность нашей системы.

Мы реализовали очень эффективную буферизацию и сами решаем когда сбрасывать кеши. Цель - производительность и реализация собственных задач платформы.

Если реально хотите сбрасывать данные на диск, то закрывайте файл.

Восхитительный грабли подкинули, хотя бы отразили это в документации или вообще убрали функции раз она не работает. Уверен, что мало кто ожидает такого вот поведения.

Вы можете это проверить самостоятельно

А вы бы могли ответить на безобидный вопрос. Раз я его задал, то самостоятельная проверка для меня не совсем удобна.

 
А FileClose() гарантирует сброс до выхода из функции? Ведь сброс может быть произведён через секунду после выхода, например. А то с вашей эффективной буферизацией у меня сомнения, что я там что-то там решаю.
 
Кстати, аналогично можно заглушить торговый функции. Всё равно сольют, так не давайте мучиться беднягам, убивать семейные бюджеты и, возможно, разрушать семьи (игромания - страшная болезнь).
 

В пятёрке FileFlush сделан точно так же, как в четвёрке, а четвёрке уже более 10 лет. Потеря данных грозит только если произошло внезапное отключение питания компьютера через тысячные доли секунды после FileFlush. И то не на 100 процентов

Не надо говорить, что FileFlush не работает! Я ведь предложил Вам проверить самостоятельно.

Проверка простая. В эксперте откройте текстовый файл с расшаренным доступом и пишите в него. Через какой-либо диспетчер файлов смотрите его содержимое, лучше при помощи FAR. По какой-либо кнопке, либо через определённое время сделайте FileFlush. Вы удивитесь - Вы моментально увидите в фаре изменения файла

Ещё никто за эти годы не жаловался на потерю данных после FileFlush или FileClose

 

Ведь Ренат прямо сказал, что Flush не работает, чего том проверять то. Делом в том, что я в Linux, терминал будет под Вайном, нужно организовать IPC с внешней программой (будет через файлы). Программа берёт мьютекс, пишет в файл, делает сброс и освобождает мьютекс. Следовательно, мне нужно точно знать что буфер сброшен до освобождения мьютекса. FileFlush отпадает, FileClose сможет гарантировать сброс буфера до выхода из функции FileClose, а не через какое-то время, возможно  малое (чтобы следующей строкой кода я мог спокойно освободить мьютекс)?

 

Вы неправильно поняли слова Рената. Но это - обычное дело. Сказано на одном техническом уровне, воспринято совсем на другом уровне.

Так что, просто проверьте. Вам же спокойнее будет

 

Я, по-моему, абсолютно правильно понял слова Рената. Изначально человек пожаловался на неработающую FileFlush и был ответ, что это нормально, как тут еще понять то можно? Здесь разговор https://www.mql5.com/ru/forum/1111/page1247#comment_1161543.


А Вы могли бы прямо ответить на мой главный вопрос: " FileClose сможет гарантировать сброс буфера до выхода из функции FileClose, а не через какое-то время, возможно  малое?"

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • отзывов: 2
  • www.mql5.com
Форум трейдеров MQL5.community
 
pavlick_:

Я, по-моему, абсолютно правильно понял слова Рената. Изначально человек пожаловался на неработающую FileFlush и был ответ, что это нормально, как тут еще понять то можно? Здесь разговор https://www.mql5.com/ru/forum/1111/page1247#comment_1161543.


А Вы могли бы прямо ответить на мой главный вопрос: " FileClose сможет гарантировать сброс буфера до выхода из функции FileClose, а не через какое-то время, возможно  малое?"

Что такое "до выхода из функции FileClose"?
 
Slawa:
Что такое "до выхода из функции FileClose"?
Представим, что в моём мкл коде происходит вызов FileClose(). Что произойдёт:
1. будет произведён сброс буфера в файл с последующим его закрытием. Мой мкл поток дождётся полного завершения этимх процедур и вернётся из функции FileClose()
2. терминал получит просьбу от меня закрыть файл. Поток вернётся из FileClose(). Терминал произведёт сброс буфера в файл и его закрытие в удобное для себя время (следовательно, не исключена ситуация при которой поток вернулся из функции, а файл фактические не закрыт и не сброшен).