Непонятная запись в логе

 
он не успел деинициализироваться за 2 с половиной секунды и его терминировали
 
Если можно, вопросы:
1. Правильно ли я понимаю, что это новая фича новой версии?
2. Можно ли убрать таймаут? При инит и деинит он вроде не нужен, а если делаешь что-то типа записи в файл, то терминация - это очень плохо.
3. 2.5 секунды на один эксперт, или на все?
4. Речь идет именно о функции деинит? Так данный эксперт ВООБЩЕ функции деинит не имеет - что же в таком случае дает задержку?
5. Может ли в задержке быть виновным работающий тестер? Если так, то фича и вовсе вредная.

Очень надеюсь, что Вы рассмотрите возможность отключения этой фичи, или, по крайней мере, объясните, зачем она нужна.

С уважением,
Кварк
 
Попробую ответить, если не прав, Слава меня поправит.
1. Правильно ли я понимаю, что это новая фича новой версии?

да, появилась совсем недавно, жутко удобная штука =)))
2. Можно ли убрать таймаут? При инит и деинит он вроде не нужен, а если делаешь что-то типа записи в файл, то терминация - это очень плохо.

нет, это настолько удобная и необходимая штука, что её убирать ни в коем случае нельзя ))) действительна только для инит и деинит.
3. 2.5 секунды на один эксперт, или на все?

на каждый, т.е. всего 2,5 сек. Кто не успел, тот опоздал =)
4. Речь идет именно о функции деинит? Так данный эксперт ВООБЩЕ функции деинит не имеет - что же в таком случае дает задержку?

тут, наверное, глюк... не знаю...
5. Может ли в задержке быть виновным работающий тестер? Если так, то фича и вовсе вредная.

Прямо - наверное, нет. Косвенно - да. Тестер жрёт ресурсы...

Очень надеюсь, что Вы рассмотрите возможность отключения этой фичи, или, по крайней мере, объясните, зачем она нужна.

все мы надеемся... а нужна, чтоб чесно сказать: "не успел отсоединиться за 2,5 сек. - твои проблемы". Зато хоть пытается отсоединиться...



Слава, извините, что так иронично.... Просто сил нет. Опять взяли и сделали "трудность", которую надо обходить... Почему бы пользователю самому не решать, сколько ему надо времени на деинициализацию эксперта? Раньше я знал, что при закрытии МТ деинит не отрабатывается вообще, и был спокоен - была определённость. И если мне надо было "грамотно" завершить работу эксперта, я просто отсоединял его от графика, и ждал столько, сколько нужно для завершения работы. А теперь ни так, ни так... А альтернативы типа if ( first ) {...} нет, и врядли будет...
В общем, я в расстроенных чувствах...



зы: кстати, алерт в деинит не работает =)
 
я уже говорил в соседних ветках, что мы будем решать эту проблему. для инита действительно никакой таймаут не нужен. а вот для того чтобы правильно завершить эксперта, у нас будет специальная строка в меню. эксперту спокойно дадут завершить функцию старт, если она в процессе (сейчас эксперта просто останавливают в произвольной точке выполнения) и эксперту спокойно дадут деинициализироваться.
О причинах, побудивших нас ввести 2.5 секундный таймаут, я тоже рассказывал.
про алерт в деините проверим.
 
про алерт в деините проверим

только при закрытии МТ - при отсоединении эксперта - нормально



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


Вроде я следил за форумом, но что-то не видел объяснения.
Вопросы мои остались, вот "новая" редакция:
1. Нельзя ли отменить или опционально отменить таймауты.
2. Почему таймаут был у меня, в эксперте, в котором деинит отсутствует.
3. Где (если можно) была упомянутая вами ветка.
4. Зачем нужен особый пункт меню? Я полагал, соответствующий код просто добавляется в соответствующий обработчик события. Впрочем, это просто любопытство. Однако, мне кажется, эксперт должен нормально (хоть час ему для этого отведи) закрываться при любом варианте выхода, а не только через особую строчку меню. Представьте, у меня пищит UPS, я должен срочно закрыть все приложения, стресс - вспомню ли я о том, что вместо крестика в левом верхнем углу надо жать на меню - выход - выход без учета таймаута - да, согласен, и так для всех 20 экспертов?
 
На всякий случай повторяю вопрос, ибо ответа так и не было. Если в форуме было обсуждение таймаута, то я его не нашел. Или подскажите, где искать, или (лучше) ответьте, можно ли будет отключать таймаут, и если нет, то почему.
 
текущая реализация такова. когда эксперта снимают с графика, меняют таймфрейм графика, закрывают график, эксперту выставляется стоп-флаг. эксперт может анализировать это состояние, используя функцию IsStopped() с тем, чтобы он сам смог корректно завершиться. эксперту даётся 2,5 секунды, чтобы он мог спокойно завершиться. после этого эксперту выставляется кансел-флаг. когда исполнительная среда сумеет проанализировать этот флаг, она терминирует эксперта. исполнительная среда не сможет проанализировать этот флаг в том случае, если работает какая-либо импортированная функция длл. если исполнительная среда за 2,5 секунды не смогла терминировать эксперта, тогда убивается поток выполннения эксперта, насмерть.
таким образом, функция init равноправна с функцией start, так как при запросе на деинициализацию эксперта заведомо неизвестно, что работает, init или start. то есть, пока нет запроса на деинициализацию, функция init спокойно работает до логического конца. как и функция start. но при запросе на деинициализацию функции init (как и функции start) даётся 2,5 секунды на более-менее спокойное завершение. после того, как текущий процесс эксперта (init или start) завершён, вызывается функция deinit, которой также даётся 2,5 секунды, после чего ей выставялется кансел-флаг и через 2,5 секунды убивается поток выполнения. это решение было выработано после тщательного анализа ситуации уже после того, как я дал обещание отдельной строки меню деинициализации эксперта с бесконечным ожиданием. я дезавуирую своё обещание, к всеобщему сожалению.
совсем иная ситуация сложилась с пользовательскими индикаторами. как я уже говорил, пользовательские индикаторы считаются в интерфейсном потоке, а не в собственном, поэтому поток выполнения пользовательского индикатора мы не можем убить.
 
1. Попытался найти в хелпе IsStopped. Получил хелп по ArrayMinimum. Странно...
2.

если исполнительная среда за 2,5 секунды не смогла терминировать эксперта, тогда убивается поток выполннения эксперта, насмерть


Зачем? То есть, я верю, что вы тщательно анализировали ситуацию, но все же, хотелось бы понять. Что плохого в том, что эксперт проработает 5 секунд, а не 2.5? Если речь идет о связи с сервером, то бога ради, разрывайте ее через 2.5 секунд. Но локально, на моей машине, зачем вводить это ограничение? Посмотрите, как просто решили эту же проблему в Виндоуз: "Завершаем работу приложения, нажмите кнопку для принудительного завершения". Все. Если приложение сохраняет важные данные, они не будут потеряны. А 2.5 секунды, простите, недостаточно. Особенно учитывая, что речь идет о деньгах.

Итак, повторю вопрос: объясните, если можно, зачем нужно принудительное завершение?
 
1. Попытался найти в хелпе IsStopped. Получил хелп по ArrayMinimum. Странно...

действительно странно. скачайте последнюю версию.

Итак, повторю вопрос: объясните, если можно, зачем нужно принудительное завершение?

странный вопрос. если Вы хотите снять эксперта с графика или закрыть график или сменить таймфрейм, то перед этими действиями эксперта надо завершить как можно скорее. похоже, Вы неправильно сформулировали вопрос: "зачем для деинициализации эксперта даётся всего 5 секунд".
ответ: чтобы не тормозить интерфейсный поток. 5 секунд для эксперта, использующего dll, более чем достаточно
Причина обращения: