Аварийное завершение init()

 

Функция init() имеет прототип:

int init();

В документации сказано, что "init() - функция, вызывающаяся в процессе инициализации модуля. В случае ее отсутствия при инициализации не вызывается никакой функции." Но я не могу найти информацию по возвращаемому значению. Оно где и кем-то учитывается?

Хотелось бы прервать инициализацию индикатора в случае несоответствия параметров. Сейчас это нельзя сделать. Максимум что приходит в голову: выставить флаг, и если он установлен, то ничего не делать.

 

Функция init() ни чего не возвращает. Её тип - void.

Если надо её аварийно завершить, можно использывать return() по условию.

 
Zhunko >>:

Функция init() ни чего не возвращает. Её тип - void.

Если надо её аварийно завершить, можно использывать return() по условию.

А если нужно прекратить загрузку индикатора, то как из init() это можно сделать?

 

В init() включается флаг аварийного завершения

В начале функции start() проверяется флаг аварийного завершения и при необходимости производится катапультирование return()

 
nen писал(а) >>

В init() включается флаг аварийного завершения

В начале функции start() проверяется флаг аварийного завершения и при необходимости производится катапультирование return()

и катапультирование пойдет по кругу, а надо бы по хорошему выгрузить советника, или индикатор т.е. выполнить deinit()

 
xrust писал(а) >>

и катапультирование пойдет по кругу, а надо бы по хорошему выгрузить советника, или индикатор т.е. выполнить deinit()

А разве при выходе из функции start() через return() мы не в deinit() попадаем?

 
nen >>:

А разве при выходе из функции start() через return() мы не в deinit() попадаем?

Нет. Не попадём. Только при системных событиях. Смена ТФ, изменение внешних переменных, перекомпиляция, смена инструмента графика и т.п...

Или самому вызывать.

 
Zhunko >>: Функция init() ни чего не возвращает. Её тип - void.

Ну тут ты неправ, Вадим: тип - int. Ведь не зря ж ее int init() обзывают.

Что делать, чтобы не грузить индюкатор в случае несоответствия параметров, хорошо написал nen. Конечно, он не деинициализируется, но и никаких особенных действий не будет выполнено.

P.S. Хотя можно и ошибку исполнения типа Zero Divide в случае нужды деинициализации придумать, чтобы индюкатор совсем выгрузился... Но вот как его заставить снова загрузиться - не знаю. Так что лучше его все-таки оставить, чтобы был готов выполнять действия, если надо будет.

P.P.S. Вот еще мысль: а что если воспользоваться iCustom() - это если графическая часть индюкатора нам не важна?

 
Mathemat >>:

Ну тут ты неправ, Вадим: тип - int. Ведь не зря ж ее int init() обзывают.

Если её и обзывают int, то это не значит, что она не void.

Надо смотрерть по факту. Если она по документации ни чего не возвращает, то она void.

 

На самом деле, насколько я понимаю, ничто не мешает нам объявить ее того типа, как нам захочется, хоть string или double. Так что о том, какой у нее тип, говорит только наша фантазия.

Но если мы сами объявили ее как int init(), то, безусловно, прототип говорит о том, что ее возвращаемое значение должно быть int. С другой стороны, и возвращать-то вроде как и не обязательно...

 

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