Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 46

 
Не знаю, как кому, а мне легче на душе стало.
 
tara:
Не знаю, как кому, а мне легче на душе стало.
От чего?
 
От понимания.
 
tara:
От понимания.
От понимания чего? )
 
komposter:
От понимания чего? )
От понимания объектно-ориентированного программирования.
 
komposter:

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

Если вам критично быстродействие, работайте со своими массивами, а сбрасывайте их на диск (то ли с помощью терминальных переменных, то ли с помощью файла) - по необходимости (например, по событию таймера каждые 5 минут).

Терминальные переменные в некоторых ситуациях очень удобны (помимо их основного назначения), но из-за низкой скорости, о чем я узнал только сейчас, уже пришлось отказаться от их применения в том качестве в каком я планировал в данном проекте. Пока решал как заменить их массивами придумал другой более быстрый алгоритм, что в итоге (массивы+алгоритм) позволило увеличить скорость почти в 15 раз. Получилось как в поговорке - "не было бы счастья, да несчастье помогло".
 
Alexey_74:


Очевидно, туплю. Что значит "реально вставляется в общий поток/тело программы". Объясните на примере:

Тут инклюдник реально вставляется или нет? Что значит "работает в отдельном файле"? И что такое тогда "инклюдник" в принципе?

#property strict

int count1,count2,count3,count4;

#include <IncTest.mqh>
//+------------------------------------------------------------------+
void OnStart()
{
  FuncFromInclude();
}
//+------------------------------------------------------------------+

Пусть есть программа:

#property strict

int count1,count2,count3,count4;

#include <IncTest.mqh>
//+------------------------------------------------------------------+
void OnStart()
{
  FuncFromInclude();
}
//+------------------------------------------------------------------+

А "инклюдник" выглядит так:

//+------------------------------------------------------------------+
void FuncFromInclude()
{
  count1 = 0;
}
//+------------------------------------------------------------------+

Тогда программа, приведённая выше, эквивалентна следующей программе:

#property strict

int count1,count2,count3,count4;

//+------------------------------------------------------------------+ // start of #include <IncTest.mqh>
void FuncFromInclude()
{
  count1 = 0;
}
//+------------------------------------------------------------------+ // end of #include <IncTest.mqh>
//+------------------------------------------------------------------+
void OnStart()
{
  FuncFromInclude();
}
//+------------------------------------------------------------------+

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

Почему неразумно хотеть подсказку в mqh для переменных из mql.

Во-первых, системе сначала нужно "прошерстить" все файлы программ MQL4 на предмет - а не включают ли они "IncTest.mqh", - чтобы собрать из них информацию о глобальных переменных.

Во-вторых, - предположим, что мы не приняли во внимание "во-первых", и "шерстим" файлы. Пусть файлов, которые включают "IncTest.mqh", оказалось около 100, и в каждом - в среднем, по 4 глобальных переменных, именами почти все они отличаются друг от друга. Значит, в выпадающем списке появится под 400 значений. Удобно ли из 400 выпадающих значений будет выбирать, учитывая, что большинство из них не относятся к делу в данный конкретный момент времени?

В-третьих, прислушайтесь к artmedia70, дело говорит. В идеале, доступ к глобальным переменным должны иметь только функции OnStart() и прочие OnXXX(), которые получают управление от системы. Остальные функции всю информацию должны получать и отдавать ТОЛЬКО через параметры. Особенно это касается "инклюдников".

Это уменьшает "связность" кода, функции становятся максимально независимыми. Это важно для поддержания "управляемости" кода программы, позволяет создавать существенно более сложные программы, да ещё и при меньшем количестве "глюков".

Например:

#property strict

int count1,count2,count3,count4;

#include <IncTest.mqh>
//+------------------------------------------------------------------+
void OnStart()
{
  FuncFromInclude(count1);
}
//+------------------------------------------------------------------+

В "инклюднике":

//+------------------------------------------------------------------+
void FuncFromInclude(int &count)
{
  count = 0;
}
//+------------------------------------------------------------------+

При этом и проблема выпадания в списке нужных переменных в "инклюднике" решится совершенно "чудесным образом".

 

Ну зачем такие бесполезные предупреждения:

struct Trend
{
    static string create(bool manual = false);
    static Trend_res check(string name, bool manual = false);
private:
    static const string trend_stamp;
    static const ENUM_LINE_STYLE success_style;
    static const ENUM_LINE_STYLE zero_style;
    static const ENUM_LINE_STYLE style;
    static const ENUM_LINE_STYLE lock_style;
    static void switch_off_trend(string name);
}; 

Предупреждение: struct has no members, size assigned to 1 byte.

Раньше не было.

 
Благодарю всех откликнувшихся.
 

С какого-то билда появились проблемы с табуляциями в эдиторе:

>
Причина обращения: