Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Запустили испанскую и португальскую версии сайта. Оцени сам!
Adima
28
Adima 2012.04.05 15:27 

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

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

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

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

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

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

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

220Volt
1175
220Volt 2012.04.05 15:40  

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

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

smshev
93
smshev 2012.04.05 15:44  
adima:

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

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

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

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

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

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

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

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

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

Adima
28
Adima 2012.04.06 11:26  
smshev:

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

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


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

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


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

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

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

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

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

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