Вопрос по импорту функций (#import "name_file.ex4") в МТ4.

 

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

Допустим, есть n-библиотек, по мере необходимости они импортируются #import "name_file.ex4" в советника на МТ4 в процессе его работы.

#import "name_file.ex4" подразумевает, что библиотека грузится динамически, при обращении к ней.

Замечено, что библиотеки "висят в памяти работающего советника", до тех пор, пока он не откреплен от окна.

Вопрос, как выгружать библиотеки из "памяти советника", когда они не нужны, в процессе работы советника?

Т.е. советник в процессе своей работы и при возникшей у него необходимости загрузил библиотеку, сделал свое дело, выгрузил библиотеку, т.к. она ему больше не нужна на текущий момент времени, если потребовалось, загрузил новую и т.п.

С уважением, Дмитрий.

 

Насколько мне известно, на выгрузку библиотек пользователь влияния не имеет, все в руках терминала. Можно попробывать через dll, но не пробывал.

P.S. говори перекладывании кода в dll и последующей загрузки этой dll из другой dll.

 
adima:

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

Допустим, есть n-библиотек, по мере необходимости они импортируются #import "name_file.ex4" в советника на МТ4 в процессе его работы.

#import "name_file.ex4" подразумевает, что библиотека грузится динамически, при обращении к ней.

Замечено, что библиотеки "висят в памяти работающего советника", до тех пор, пока он не откреплен от окна.

Вопрос, как выгружать библиотеки из "памяти советника", когда они не нужны, в процессе работы советника?

Т.е. советник в процессе своей работы и при возникшей у него необходимости загрузил библиотеку, сделал свое дело, выгрузил библиотеку, т.к. она ему больше не нужна на текущий момент времени, если потребовалось, загрузил новую и т.п.

С уважением, Дмитрий.

попробуйте через вызов, например, WinAPI, запускать из советника батник, который будет перекомпиливать советника (в результете чего будет срабатывать его деинит/инит)

если Ваша библиотека импортируется у действительно только "по-необходимости", то после рекомпила она реально может и не сразу подгрузится в советник

 
smshev:

попробуйте через вызов, например, WinAPI, запускать из советника батник, который будет перекомпиливать советника (в результете чего будет срабатывать его деинит/инит)

если Ваша библиотека импортируется у действительно только "по-необходимости", то после рекомпила она реально может и не сразу подгрузится в советник


Согласен, что если перезагрузить ("перекомпеливать") советник, сработает deinit, и ВСЕ загруженные библиотеки "сбросятся из памяти" и конечно такое возможно, что библиотеки использовавшиеся минуту назад, могут и не "загрузиться в память", а только через время, при условии, что надобность в той или иной библиотеке произойдет. Но, к сожалению, это не есть гуд для данной задачи - передергивать советник компиляцией, т.к. в этот момент могут быть использованы другие библиотеки, процесс не прерывный.
 
adima:

Согласен, что если перезагрузить ("перекомпеливать") советник, сработает deinit, и ВСЕ загруженные библиотеки "сбросятся из памяти" и конечно такое возможно, что библиотеки использовавшиеся минуту назад, могут и не "загрузиться в память", а только через время, при условии, что надобность в той или иной библиотеке произойдет. Но, к сожалению, это не есть гуд для данной задачи - передергивать советник компиляцией, т.к. в этот момент могут быть использованы другие библиотеки, процесс не прерывный.
да бросьте Вы)) то что нужно подгрузится при обращении
 


С этим механизмом соглашусь, так с пользовательскими библиотеками MQL и работает. Постараюсь, иначе поставить свой вопрос на примере:

Предположим, есть модуль caller.ex4, он вызывает (#import "name_file.ex4") по-мере необходимости функции из библиотек: lib1.ex4, lib2.ex4, ..., lib(n).ex4. Допустим, модуль вызвал сначала lib1.ex4, потом ему потребовалась еще lib8.ex4, он тоже ее вызвал, потом потребовалось еще и он вызвал lib3.ex4 и т.д. По ходу работы модуля надобность в библиотеке lib1.ex4 пропала и он (модуль) должен ее "удалить из памяти".

Этот пример, можно переложить на читателя стоящего перед полкой с книгами в библиотеке. У читателя есть список всех книг, которые стоят на полке, а также он знает, "как стоят книги" на полке. И он по своему списку, по какому то алгоритму берет с полки одну книгу, потом еще одну книгу, потом еще две и тут же поставил (вернул) одну книгу на полку, т.к. то ли в руках уже не помещалось, то ли надобность уже отпала, а в конце своей эпопеи, все книги вернул на полку.

Вопрос, как "удалять не нужные библиотеки из памяти" при этом модуль продолжает работать и пользоваться другими библиотеками?

 
smshev:
да бросьте Вы)) то что нужно подгрузится при обращении

Предложенный Вами метод точно рабочий, но жесткий, хотелось бы решить эту задачу иначе. )
Причина обращения: