Ошибки, баги, вопросы - страница 2555

 
TheXpert:
добавь FILE_SHARE_READ для хендла для записи и FILE_SHARE_WRITE для хендла для чтения

Не работает, только по отдельности если вешать на график. Использовал:

handle_write=FileOpen("checkbox_color.txt",FILE_WRITE|FILE_SHARE_READ|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Влад:

Не работает, только по отдельности если вешать на график. Использовал:

Всё решил. Использовал:

handle_write=FileOpen("checkbox_color.txt",FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Возник новый вопрос. В первом графике я меняю переменную благодаря вышеуказанному индюку. На втором графике информация отображается только при смене ТФ, а не мгновенно, как хотелось. Каким образом это можно решить? Тупо обновление графика путем Обновить при нажатии ПКМ не помогает.
 

билд 2135 вообще поломанный

#define abort(ANY) do{printf("abort, file=%s,  line=%i", __FILE__, __LINE__); Alert(1/(uint)MathAbs(0));}while(false)

#define GENERATE_VECTOR_GROWTH_FACTOR 2
#define GENERATE_VECTOR(NAME, REF)                                         \
   template <typename T>                                                   \
   class NAME                                                              \
   {                                                                       \
      uint sz;                                                             \
   public:                                                                 \
      T a[];                                                               \
      NAME(): sz(0) {}                                                     \
      NAME(uint count): sz(0) {                                            \
         if (ArrayResize(this.a, count) == -1)                             \
            abort(0);                                                      \
         this.sz = count;                                                  \
      }                                                                    \
      uint size()const           {return this.sz;}                         \
      void clear()               {this.sz = 0;}                            \
      void push_back(T REF value) {                                        \
         if (this.sz == ArraySize(this.a)  &&                              \
             ArrayResize(this.a, this.sz*                                  \
                           GENERATE_VECTOR_GROWTH_FACTOR+1) == -1)         \
            abort(0);                                                      \
         this.a[this.sz++] = value;                                        \
      }                                                                    \
      void reserve(uint new_cap) {                                         \
         if ((int)new_cap > ArraySize(this.a))                             \
            ArrayResize(this.a, new_cap);                                  \
      }                                                                    \
      void erase(uint pos) {                                               \
         if ( ! ArrayRemove(this.a, (int)pos, 1) )                         \
            abort(0);                                                      \
         -- this.sz;                                                       \
      }                                                                    \
   };
#define GENERATE_VECTOR_EMPTY
GENERATE_VECTOR(vector_fund, GENERATE_VECTOR_EMPTY);
GENERATE_VECTOR(vector_ref, const &);
#undef GENERATE_VECTOR_EMPTY
#undef GENERATE_VECTOR_GROWTH_FACTOR
#undef GENERATE_VECTOR

'GENERATE_VECTOR' - unexpected token, probably type is missing?    1_mystd.mqh    74    1

'GENERATE_VECTOR' - unexpected token, probably type is missing?    1_mystd.mqh    75    1

'GENERATE_VECTOR' - variable already defined    1_mystd.mqh    75    1

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

 
Vict:

билд 2135 вообще поломанный

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

Обманываю, нормально всё, в один из абортов вызывался в виде
abort();

раньше компилятор съедал, а в новом билде отказался, наверное что-то подправили (ну вряд ли я случайно ноль удалил).

 
Обратил внимание, что при компиляции ME загружает 2 ядра (26%) процессора, возникает вопрос - это многопоточность, тогда почему не использовать бы все ядра для компиляции или это ошибка в виде нерационального использования ресурсов?
 
Vict:
Обманываю, нормально всё, в один из абортов вызывался в виде

раньше компилятор съедал, а в новом билде отказался, наверное что-то подправили (ну вряд ли я случайно ноль удалил).

Кстати надо просить разработчиков, чтобы ввели штатный аборт, ассерт … В идеале конечно и исключения. Но хотя бы с малого начать.
 
Alexey Navoykov:
Кстати надо просить разработчиков, чтобы ввели штатный аборт, ассерт … В идеале конечно и исключения. Но хотя бы с малого начать.

замолвите слово, я, если не ошибаюсь, то еще в прошлом цикле своих занятий MQL это просил, года 4 как прошло, холивар правда от грамотеев пришлось выслушать, мол да не нужно это , пиши так... ну в общем все как обычно, а как разорвать выполнение программы при наличии критической ошибке доступа к данным OHLC или индикатора... просмотрел пол кодобазы, да некоторые кодописатели  проверяют эти условия, но обработки нет, максимум с вежливым видом вывод в лог эксперта, типа мол беда произошла, ты не переживай в общем, я дальше буду работать с некорректными данными на этом тике )))

ЗЫ: накипело, нужен простой способ прекратить обработку текущего тика! - прекратить работу эксперта значит можно, а вот прекратить обработку одного тика выдумывай и выкручивайся - подозреваю что на уровне компилятора abort() реализуется не сложнее ExpertRemove() - который уже существует

ЗЫЗЫ: задача написания эксперта под MQL без abort() в процедурном стиле больше похожа на изобретение, чем на сложить код из готовых подпрограмм, подозреваю, что вот эти постоянные дискуссии как написать индикатор который может правильно подгрузить историю по другому ТФ тоже будут проще решены с использованием abort() - еще не размышлял на эту тему

 
Igor Makanu:

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

Вот-вот, чуть заикнёшься, сразу повылезают эти грамотеи изо всех щелей, мол "это вам не С++" )

нужен простой способ прекратить обработку текущего тика! - прекратить работу эксперта значит можно, а вот прекратить обработку одного тика выдумывай и выкручивайся - подозреваю что на уровне компилятора abort() реализуется не сложнее ExpertRemove() - который уже существует

Ну вот у меня и abort, и assert реализованы точно так же делением на ноль, как и в приведённом выше коде.  Хотя это конечно некрасиво, и иногда путаюсь, т.к. предшествующее сообщение в логе не всегда замечаю.  Может есть какая-то другая ошибка, чтобы выдавала в логе что-то типа "internal error" ?   Это хоть не так позорно выглядело бы )

 
Alexey Navoykov:

Вот-вот, чуть заикнёшься, сразу повылезают эти грамотеи изо всех щелей, мол "это вам не С++" )

Ну вот у меня и abort, и assert реализованы точно так же делением на ноль, как и в приведённом выше коде.  Хотя это конечно некрасиво, и иногда путаюсь, т.к. предшествующее сообщение в логе не всегда замечаю.  Может есть какая-то другая ошибка, чтобы выдавала в логе что-то типа "internal error" ?   Это хоть не так позорно выглядело бы )

вот @Vict помогал исключение с выходом в ОС через макроподстановки сделать  https://www.mql5.com/ru/forum/318246/page10#comment_12651045

, в целом работоспособное решение, но... но выглядит жутко и отвратительно! )))

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