Такое поведение означает, что DLL все еще используется. Ищите другие индикаторы/советники/программы, вызывающие функции этой DLL.
Также DLL не выгружается, пока открыто окно тестера (в МТ4), если проводился тест советника, использующего DLL.
Такое поведение означает, что DLL все еще используется. Ищите другие индикаторы/советники/программы, вызывающие функции этой DLL.
Также DLL не выгружается, пока открыто окно тестера (в МТ4), если проводился тест советника, использующего DLL.
dll не используется. Других советников, использующих dll нет. Скорее всего, dll намерено не выгружает терминал что бы не подгружать его при повторном использовании.
> (в МТ4)
Кто то еще использует MT4? )
dll не используется. Других советников, использующих dll нет. Скорее всего, dll намерено не выгружает терминал что бы не подгружать его при повторном использовании.
> (в МТ4)
Кто то еще использует MT4? )
Уточните все-таки: это происходит после тестирования или после удаления советника с онлайн-графика?
С онлайн графика. В тестировании dll не участвует. В принципе, уже все равно, добавил watchdog таймер. Если советник перестает забирать данные - поток в dll прерывается.
Так вот же и ответ: в DLL создан поток (Thread?). Если его никто не прервал, то DLL и не выгрузится. Отправляйте из OnDeinit() советника команду окончания работы в DLL. А в DLL завершайте все созданные потоки по этой команде.
Так вот же и ответ: в DLL создан поток (Thread?). Если его никто не прервал, то DLL и не выгрузится. Отправляйте из OnDeinit() советника команду окончания работы в DLL. А в DLL завершайте все созданные потоки по этой команде.
Разумеется, при нормальном завершении работы советника вызываются методы завершения всех потоков и производится удаление созданых объектов (но даже в этом случае не вызывается detach). Но советник может вылетать не только штатно, но и не штатно, например, при обращении к нулевому указателю. Обычно, когда по любой причине умирает процесс использующий DLL и иные процессы ее не используют - она выгружается из памяти вызывая detach (но может отсаваться в кеше). В данном же случае, dll цепляется к процессу терминала, и не важно, использует советник dll или нет - она не будет выгружена. Именно по этому, при выбросе и не перехвате исключения или acess violation - DLL за собой вызывает краш терминала.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования