MetaTrader 4 Client Terminal build 646: Умный поиск, книги в Маркете и обновление окна параметров MQL4-программы - страница 15
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
К вопросам по FileFlush. В MQL5 он должен работать, там поизучал скриптом (ниже). После записи каждой строки из 21 символа либо FileFlush, либо три операции: FileClose, FileOpen, FileSeek в конец файла.
Получил неожиданные результаты. FileFlush выполнялся от 25 миллисекунд и дольше. А тройка операций за время не выше 0.1 миллисекунды.
25 мс сильно не соответствует обычной оценке в 4-6 мс на ожидание полуоборота магнитной пластины.
Также и FileClose, о котором все говорят, что происходит сброс буферов на диск, то есть Flush, очевидно, не реализует запись на магнитную пластину. За 100 мкс в среднем это невозможно.
Поскольку перед этим поразбирался в системе команд интерфейса ATA (интерфейсы жестких дисков IDE, EIDE, SATA основаны на нем) и вообще не нашел как таковой команды сброса на магнитные пластины, теперь так представляю исполнение Flush: меняется режим работы диска сначала на работу без буферизации, затем возврат на работу с буферизацией. Такие команды в ATA есть. Они сложные, как я понимаю. Зато действительно прямо сейчас корректируется магнитная дорожка.
А FileClose, очевидно, забирает все из буфера операционной системы в буфер контроллера диска, и все. Когда физически из этого буфера пройдет запись на пластины, неизвестно, это решит контроллер диска на свое усмотрение. Но при этом видимая длина файла уже меняется на новую. Наблюдал долго.
Разница, на первый взгляд, в уровне надежности. Однако известно, что уже в 2000 году буферы новых дисков в 4 Мб при отключении электропитания вполне надежно записывались на пластины за счет инерции вращения и накопленного в обкладках конденсаторов заряда. Сейчас, значит, и 64 Мб успевают записаться.
Вот так мне теперь кажется, для MQL5. Насколько я понимаю, в MQL4 разработчики пошли дальше, вообще убрав Flush.
Всё происходит как минимум в несколько десятков раз сложнее, чем вы себе представляете. Вы зря изучали систему команд интерфейса ATA.
Если никак не обойтись "ненастоящими" функциями Рената, пользуйтесь WinAPI. Можно попробовать начать отсюда. Требуется знание английского хотя бы на среднем уровне.
На строках типа:
и
компилятор постоянно выдает предупреждения о том, что выражения всегда имеют результат false. То есть предполагается, что указанные функции не могут вернуть -1. Хотя в справке написано:
Ошибка в справке, в компиляторе или в представленном коде?
Во всплывающей подсказке видно, что "система" считает, что возвращаемый тип - uint, значения которого, естественно, не могут быть меньше нуля, так что, само по себе, предупреждение совершенно правомерно.
Интересно, что испытания следующего кода (надеюсь, я не угадал какой-нибудь реально существующий file_handle):
Дают в качестве результата:
Скорее всего, как всегда, справка устарела.
Во всплывающей подсказке видно, что "система" считает, что возвращаемый тип - uint, значения которого, естественно, не могут быть меньше нуля, так что, само по себе, предупреждение совершенно правомерно.
Да, действительно, не обратил внимания на тип.
Скорее всего, как всегда, справка устарела.
Wine 1.6
При работе со встроенной справкой попрежнему вылетают МЕ и МТ.
sorry за оффтоп
верно ли я понимаю что портал mql4.com постепенно сливается с mql5.com?
Сейчас заметил. Компилятор считает что это нормально ( е=1>2; ). Хотел у=е/н.
Но если переменная e будет описана, как нечто нецелочисленное, то компилятор наверное что-нибудь по этому поводу скажет.
Wine 1.6
При работе со встроенной справкой попрежнему вылетают МЕ и МТ.
Проблема с эдитором пока не решена.