MetaTrader 4 Client Terminal build 646: Умный поиск, книги в Маркете и обновление окна параметров MQL4-программы - страница 15

 
Vlad143:

К вопросам по 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. Можно попробовать начать отсюда. Требуется знание английского хотя бы на среднем уровне.

 
Scriptong:

На строках типа:

и

компилятор постоянно выдает предупреждения о том, что выражения всегда имеют результат false. То есть предполагается, что указанные функции не могут вернуть -1. Хотя в справке написано:

Ошибка в справке, в компиляторе или в представленном коде?


Во всплывающей подсказке видно, что "система" считает, что возвращаемый тип - uint, значения которого, естественно, не могут быть меньше нуля, так что, само по себе, предупреждение совершенно правомерно.

Код

Интересно, что испытания следующего кода (надеюсь, я не угадал какой-нибудь реально существующий file_handle):

#property strict

/******************************************************************************/
void OnStart()
{
  struct s { int i; } o;
  Print("Вёрнуто = ", FileReadStruct(777888999, o));
}

Дают в качестве результата:

23:49:21 Script Test EURUSD,M5: loaded successfully
23:49:21 Test EURUSD,M5: initialized
23:49:21 Test EURUSD,M5: Вёрнуто = 0
23:49:21 Test EURUSD,M5: uninit reason 0
23:49:21 Script Test EURUSD,M5: removed

Скорее всего, как всегда, справка устарела.

 
simpleton:

Во всплывающей подсказке видно, что "система" считает, что возвращаемый тип - uint, значения которого, естественно, не могут быть меньше нуля, так что, само по себе, предупреждение совершенно правомерно.

Да, действительно, не обратил внимания на тип.

Скорее всего, как всегда, справка устарела.

Ясно. Спасибо.
 

Wine 1.6

При работе со встроенной справкой попрежнему вылетают МЕ и МТ.

 

sorry за оффтоп

верно ли я понимаю что портал mql4.com постепенно сливается с mql5.com?

 
Подскажите плз - а 'Экономический календарь' в MT4 уже есть?
 
Сейчас заметил. Компилятор считает что это нормально ( е=1>2; ). Хотел у=е/н.
 
Andrei-1:
Сейчас заметил. Компилятор считает что это нормально ( е=1>2; ). Хотел у=е/н.
Результатом выражения будет ноль, что равнозначно false.
Но если переменная e будет описана, как нечто нецелочисленное, то компилятор наверное что-нибудь по этому поводу скажет.
 
agvozdezkiy:

Wine 1.6

При работе со встроенной справкой попрежнему вылетают МЕ и МТ.


Проблема с эдитором пока не решена.

 
Вчера обновился терминал от Альпари.
Присоединяюсь к протесту против принудительной привязки панелей инструментов к левому краю окна.
У меня к ноутбуку подключен внешний монитор, и окно терминала растянуто на оба монитора.
Так вот, все панели с правого экрана (ноута) улетели налево, на внешний монитор, и вернуть их на правый экран теперь невозможно.
Мало того, любая поставленная последней панелька попадает на границу экранов, и какая-нибудь кнопка делится пополам.
Это крайне неудобно!
Очевидно, что инструменты должны располагаться примерно над клавиатурой.
И уж если смещение панелей строго влево неудобно даже некоторым пользователям в пределах одного экрана,
то ходить за выбором инструмента на соседний монитор - это просто издевательство какое-то!

Раньше панельки можно было разместить где угодно, и они прекрасно выравнивались встык друг за другом,
достаточно было при перетаскивании чуть надвинуть левый край панели на конец предыдущей.
Одна только беда была - при обновлении весь строй панелей слетал, и приходилось расставлять их заново.
Значит, надо было исправить лишь этот сброс.
Например, сохранять расположение панелей инструментов в профиле, наряду с остальными параметрами.

Пожалуйста, исправьте это "наказание"!
Варианты:
1. Выбор точки привязки - влево, вправо или по центру.
Это как минимум решит проблему с внешним монитором, где бы он ни располагался, справа или слева от основного.
2. Возможность произвольно размещать панельки с автоматическим запоминанием их расположения в профиле.
3. Или хотя бы верните прежний способ обращения с панелями.

Лично мне предпочтителен 2-й вариант, как наиболее гибкий.