После смены таймфрейма и тд - dll не выгрузится
Вместо того, что вы предложили, проще хранить данные которые вам нужно загрузить в бинарном виде, чтобы загрузка занимала доли секунды
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Решил поделиться информацией по сабжу.
История такая: на диске есть набор файлов, которые читаются в память.
В памяти данные из файлов распределяются по времени начала дня и названию валюты.
Работа производится при помощи Dll.
.
Понятно, что при таком раскладе можно сделать маленькую оптимизацию,
а именно: чтобы при закрытии всех графиков Dll не выгружалась из памяти.
Потому что если в пустом терминале закрыть все и открыть новый график
(или поменять что-то: таймфрейм / инструмент / параметры индикатора на единственном графике), <--- здесь не прав
то будет произведен Detach / Attach Dll'я и данные будут читаться заново, а их может быть немало.
.
Я решил это сделать так:
- достать текущий поток threadId; по нему - идентификатор процесса procId
- по procId можно получить список всех модулей, которые относятся к процессу
- со все модулей получаем их полные пути и ищем там нашу Dll
- используем на полученном пути LoadLibrary()
.
Попутно удалось сделать открытие:
Если в коде Dll написать вызовы:
HANDLE thread = GetCurrentThread();
DWORD processId = GetProcessIdOfThread(thread);
то это будет ошибка 127 при загрузке Dll.
Да, вот так, очень весело! :-).
Если комментирую - все сразу запускается и работает.
Раскомментирую - появляется ошибка 127 при загрузке Dll.
Видимо, в секции импорта как-то прописываются адреса двух этих функций-
а метатрейдер почему-то их боится...
.
Поэтому идентификатор процесса я достаю по-другому.
/строим список процессов - ищем terminal.exe / достаем его модули / ищем нашу Dll/
В итоге все получилось! Индикатор выходит - а Dll не выгружается и данные потом не перечитываются!
.
Надеюсь, эта информация кому-нибудь пригодится!