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

 
Сергей Таболин:

Уважаемые разработчики, столкнулся с проблемой. Необходимо ваше внимание.

Дело в том, что TesterStop() и ExpertRemove() не останавливают тест немедленно. Иллюстрация ошибки тут. Извините за некоторую несдержанность в том посте.

Подумалось, что было бы более правильно ввести константу MQL_TESTER_STOP - признак остановки тестирования по TesterStop() или ExpertRemove().

В таком случае можно было бы выбирать дальнейшие действия:

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

TesterStop даёт команду на завершение тестирования. Это означает, что после завершения текущего обработчика OnInit, OnTick, OnTimer, OnChartEvent, никакие события тестера больше не будут обрабатываться, так как цикл обработки будет завершён. А вызовется OnTester и OnDeinit

 
Slava:

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

TesterStop даёт команду на завершение тестирования. Это означает, что после завершения текущего обработчика OnInit, OnTick, OnTimer, OnChartEvent, никакие события тестера больше не будут обрабатываться, так как цикл обработки будет завершён. А вызовется OnTester и OnDeinit

Спасибо, я это уже понял. Но это не решает проблему. Решить её можно либо константой MQL_TESTER_STOP, либо изменением возврата с void на bool.

Неожиданное решение подсказал Alexey Viktorov. Если после TesterStop() использовать return, то вроде всё нормализуется. Как и почему это происходит лично я догнать не могу... Тем не менее...

Отсюда, либо добавить этот момент в документацию, либо изменить void на bool.

П.С. С этой проблемой я столкнулся на билде 2085. До этого проблем не было. На мой взгляд, это о чём-то да говорит? )))

 

Здравствуйте,

почему в тестере иногда используемые индикаторы не отрисовываются?

перезапускаю терминал - начинают отрисовываться...

потом снова перестают - хотя код не менялся...

 

Также хочется задать второй вопрос: 

почему в тестере не обновляются графические объекты несмотря на принудительное ChartRedraw(0); ?

на самом деле тестер их потом обновляет но с огромными задержкам и рывками...

Спасибо.

EDIT: прошу прощения, ложная тревога, этот вопрос снимается (проблема была в моём глючнокоде)

но вопрос по индикаторам остаётся в силе.

 
P.S. версия 2085 от 13 июня
 

@Slava подскажите, ведь в билде 2007 TesterStop() передавал управление только в OnDeinit ? Передачи управления в OnTester не было?

Поэтому мой код и работал нормально, и результатом теста в таком случае был 0.

 
Сергей Таболин:

@Slava подскажите, ведь в билде 2007 TesterStop() передавал управление только в OnDeinit ? Передачи управления в OnTester не было?

Поэтому мой код и работал нормально, и результатом теста в таком случае был 0.

Заведите свой глобальный флаг, взводите его перед вызовом ТестерСтоп, и анализируйте в ОнТестер.

 
Andrey Khatimlianskii:

Заведите свой глобальный флаг, взводите его перед вызовом ТестерСтоп, и анализируйте в ОнТестер.

Завёл ))) Не всё так просто оказалось. В принципе проблема решена, просто хочется услышать подтверждение, что раньше TesterStop работал несколько иначе.

 
2085
Linux, Wine-4.0.1

Залипает ссылка ведущая на описание инструмента.

Если ссылки в описании нет, то эффект не проявляется.

 


Файлы:
link.gif  5125 kb
 
Vladimir Karputov:

Возможно у Вас 32x битная операционная система. Или оперативной памяти мало.

комп. lenovo G50-45 (LAPTOR-46OAGFM3)
просесор AMD A4-6210 APU with AMD Radeon
         R3 Graphics  1.80 GHz
оперативная память 2.00 ГБ
тип системы 64- разрядная, процесор х64
Причина обращения: