Как советнику перезагрузить себя? - страница 5

 
Ihor Herasko:

Я ведь нигде не писал о том, что DLL нужно выгрузить. Этим занимается терминал. Я написал: сообщает о том, что нужно выгрузиться. Не додумывайте пожалуйста того, о чем я не писал.

Так как же ему дать об этом знать? Разве ExpertRemove не должен инициировать этот процесс?

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

Есть какая-то особенность при применении шаблона. Хочется разобраться.

 
Ihor Herasko:

Пауза не поможет. Ведь это просто откладывание проблемы на время. В итоге вероятность dealock остается той же. Если DLL с кодом, то нужно просмотреть все ее обращения к окнам терминала (или даже к самому процессу). 

Почему? Если терминал выгружает неиспользуемые ДЛЛ по тайм-ауту, то пауза должна помочь. Но это все догадки.

ДЛЛ системные, к окнам обращаются. Но ведь не после ЭкспертРемув?

 
Andrey Khatimlianskii:

Почему? Если терминал выгружает неиспользуемые ДЛЛ по тайм-ауту, то пауза должна помочь. Но это все догадки.

ДЛЛ системные, к окнам обращаются. Но ведь не после ЭкспертРемув?

Если системные, то ничего из того, что я описал, не нужно. Имел в виду, что если своя DLL, которая наплодила ниток, то перед выгрузкой эксперта нужно все эти нитки остановить. 

 

Тут у меня вопрос такой нечаянно возник...

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

//подозреваю что эксперт перезагружается именно под таким пользователем, вот и подвисает...

 
Andrey Khatimlianskii:

Так как же ему дать об этом знать? Разве ExpertRemove не должен инициировать этот процесс?

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

Есть какая-то особенность при применении шаблона. Хочется разобраться.

DLL загружается при первом обращении к её функциям и выгружается через какое-то время после того как на неё нет ссылок (то есть когда ВСЕ индикаторы и эксперты которые её использовали выгружены).
Совсем не факт что между OnDeinit() и OnInit() (при перезапуске эксперта/применении шаблона) произойдёт выгрузка и повторная загрузка DLL.

А если повторная загрузка DLL не производится то static переменные внутри неё не сбрасываются и не все ресурсы освобождаются/реаллоцируются. С точки зрения DLL ничего не поменялось.
Если она где-то зацепила хендлы окон и внутри себя сохранила то может начаться свистопляска.

Аккуратно и внимательно пересмотрите код в OnDeinit - все ли нужные команды вы скомандывали DLL и все ли ресурсы освободили
 
Maxim Kuznetsov:
DLL загружается при первом обращении к её функциям и выгружается через какое-то время после того как на неё нет ссылок (то есть когда ВСЕ индикаторы и эксперты которые её использовали выгружены).
Совсем не факт что между OnDeinit() и OnInit() (при перезапуске эксперта/применении шаблона) произойдёт выгрузка и повторная загрузка DLL.

А если повторная загрузка DLL не производится то static переменные внутри неё не сбрасываются и не все ресурсы освобождаются/реаллоцируются. С точки зрения DLL ничего не поменялось.
Если она где-то зацепила хендлы окон и внутри себя сохранила то может начаться свистопляска.

Аккуратно и внимательно пересмотрите код в OnDeinit - все ли нужные команды вы скомандывали DLL и все ли ресурсы освободили

Ни каких команд DLL не отдаю, нет ни открытых хендлов, ни ссылок. Нечего чистить.

Видимо, придется экспериментировать, отключая ДЛЛ или вводя паузу.

Благодарю за попытки помочь!

 
Renat Akhtyamov:

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

//подозреваю что эксперт перезагружается именно под таким пользователем, вот и подвисает...

Терминал под админом, но это роли не играет.

Вручную-то эксперт удаляется с графика нормально.

Проблема пока даже не в повторном запуске, а в подвисании при само-удалении.


Кстати, если попробовать удалить такого советника (или закрыть график, закрыть терминал), то терминал вообще подвисает и завершается только снятием процесса.
В этом, видимо, и загвоздка.

 
Andrey Khatimlianskii:

Терминал под админом, но это роли не играет.

Вручную-то эксперт удаляется с графика нормально.

Проблема пока даже не в повторном запуске, а в подвисании при само-удалении.


Кстати, если попробовать удалить такого советника (или закрыть график, закрыть терминал), то терминал вообще подвисает и завершается только снятием процесса.
В этом, видимо, и загвоздка.

тогда только: надо команду(функцию) по полочкам разложить, её работу

но нам это неведомо

исправят, будет работать

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