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

Slava
Модератор
12295
Slava  
Сергей Таболин:

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

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

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

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

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

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

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

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

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

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

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

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

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

transcendreamer
5224
transcendreamer  

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

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

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

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

transcendreamer
5224
transcendreamer  

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

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

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

Спасибо.

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

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

transcendreamer
5224
transcendreamer  
P.S. версия 2085 от 13 июня
Сергей Таболин
1634
Сергей Таболин  

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

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

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

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

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

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

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

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

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

Roman
168
Roman  
2085
Linux, Wine-4.0.1

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

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

 


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

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

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