Сделайте DoWork пустым и проверьте снова.
2006.08.14 17:50:03 exp2 EURUSD,M1: initialized
2006.08.14 17:50:03 exp2 EURUSD,M1: Init
2006.08.14 17:50:03 exp2 EURUSD,M1: loaded successfully
2006.08.14 17:50:03 exp2 EURUSD,M1: deinitialized
2006.08.14 17:50:03 exp2 EURUSD,M1: In_DoWork_function
2006.08.14 17:50:03 exp2 EURUSD,M1: Deinit_pre
2006.08.14 17:50:03 Compiling 'exp2'
Кусок лога (DoWork() пустая):
2006.08.14 17:52:11 exp2 EURUSD,M1: initialized
2006.08.14 17:52:11 exp2 EURUSD,M1: Init
2006.08.14 17:52:11 exp2 EURUSD,M1: loaded successfully
2006.08.14 17:52:11 exp2 EURUSD,M1: deinitialized
2006.08.14 17:52:11 exp2 EURUSD,M1: In_DoWork_function
2006.08.14 17:52:11 exp2 EURUSD,M1: Deinit_pre
2006.08.14 17:52:11 Compiling 'exp2'
Для полноты, так сказать:
//+------------------------------------------------------------------+ //| exp2.mq4 | //| qwe | //| qwe | //+------------------------------------------------------------------+ #property copyright "qwe" #property link "qwe" //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Print("Init"); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- if(REASON_RECOMPILE == UninitializeReason()) { Print("Deinit_pre"); DoWork(); Print("Deinit_after"); } Print("Deinit_all"); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //---- return(0); } //+------------------------------------------------------------------+ void DoWork() { //---- Print("In_DoWork_function"); //---- } //+------------------------------------------------------------------+
Читается снизу вверх:
2006.08.14 18:08:20 dowork2 GBPUSD,H1: initialized
2006.08.14 18:08:20 dowork2 GBPUSD,H1: Init
2006.08.14 18:08:20 dowork2 GBPUSD,H1: loaded successfully
2006.08.14 18:08:20 dowork2 GBPUSD,H1: deinitialized
2006.08.14 18:08:20 dowork2 GBPUSD,H1: Deinit_all
2006.08.14 18:08:20 dowork2 GBPUSD,H1: Deinit_after
2006.08.14 18:08:20 dowork2 GBPUSD,H1: In_DoWork_function
2006.08.14 18:08:20 dowork2 GBPUSD,H1: Deinit_pre
У меня 195 билд.
Тем не менее лог у меня выглядит так ("читается снизу вверх" :) ):
2006.08.15 13:38:59 exp2 EURUSD,M1: initialized
2006.08.15 13:38:59 exp2 EURUSD,M1: Init
2006.08.15 13:38:59 exp2 EURUSD,M1: loaded successfully
2006.08.15 13:38:59 exp2 EURUSD,M1: deinitialized
2006.08.15 13:38:59 exp2 EURUSD,M1: In_DoWork_function
2006.08.15 13:38:59 exp2 EURUSD,M1: Deinit_pre
2006.08.15 13:38:59 Compiling 'exp2'
2006.08.15 13:38:42 exp2 EURUSD,M1: initialized
2006.08.15 13:38:42 exp2 EURUSD,M1: Init
2006.08.15 13:38:42 exp2 EURUSD,M1: loaded successfully
Теперь все стало нормально, спасибо.
2006.08.15 16:11:29 exp2 EURUSD,H4: initialized
2006.08.15 16:11:29 exp2 EURUSD,H4: Init
2006.08.15 16:11:29 exp2 EURUSD,H4: loaded successfully
2006.08.15 16:11:29 exp2 EURUSD,H4: deinitialized
2006.08.15 16:11:29 exp2 EURUSD,H4: Deinit_all
2006.08.15 16:11:29 exp2 EURUSD,H4: Deinit_after
2006.08.15 16:11:29 exp2 EURUSD,H4: In_DoWork_function
2006.08.15 16:11:29 exp2 EURUSD,H4: Deinit_pre
2006.08.15 16:11:28 Compiling 'exp2'
2006.08.15 16:10:02 exp2 EURUSD,H4: initialized
2006.08.15 16:10:02 exp2 EURUSD,H4: Init
2006.08.15 16:10:01 exp2 EURUSD,H4: loaded successfully
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пишем программку на MQL4.
Как известно, при перекомпилировании программы вызывается функция deinit(), на которую отводится максимум 2,5 секунды.
Допустим, у нас вызвалась deinit() и UninitializeReason() сказала нам REASON_RECOMPILE. В этом случае нам необходимо выполнить некоторую функцию DoWork(), вызываем её. При этом функция DoWork() не всегда работает до конца и deinit() тут же прерывается (даже если после DoWork() что то есть).
Рассмотрим пример:
Запускаем. Затем перекомпилируем.
Я ожидаю увидеть следующее: "Deinit_pre", "In_DoWork_function", "Deinit_after", "Deinit_all", "deinitialized"
В итоге получаю: "Deinit_pre", "In_DoWork_function", "deinitialized"
Как так получается? Может быть я что то не так делаю?
P.S. Выполнение функции DoWork() в моей ситуации критически важно.