Таймер - страница 6

 
Yurich:
Прерывание - это когда  исполняется  OnTick, а пришло более важное событие, например OnTimer. Исполнение OnTick приостанавливается,  исполняется код OnTimer, затем снова продолжает выполнятся OnTick.
Пипец. Да это страшный сон.
 
pusheax:

OnTimer, OnTick, OnTrade... это и есть прерывания.

Я сначала тож так подумал. Но есть варианты. Например мы не можем отметить какой-нить OnTimer словом interrupts и знать, что при наступлении события онТаймер он будет вызван точно в момент события прервав обработку любых других событий (по однопоточной схеме MSDOS - сохраняем стек, обрабатываем прерывание, восстанавливаем стек, передаём управление дальше).  Такая схема могла многие проблемы решать более простыми методами. Например достаточно приятно выглядит ОнТик вызываемый по такой схеме. Здесь тонкости есть - обработка повторных входов понадобится (напр. два тика с малым промежутком), но это решаемо вообще-то.
 
TheXpert:
Пипец. Да это страшный сон.
Вооще-то Yurich описал именно прерывание в классическом смысле, а не обработку прерываний OnTick, OnTimer
 
Например если в обработчике OnTick кто-то поставит Sleep(100000); что ж теперь OnTimer, OnTrade вообще не жить что ли?
 
TheXpert:
Пипец. Да это страшный сон.

Да не, не страшный. Есть наработанные древние схемы как избежать траблов.

Но всё равно сон.  Не верю, что разработчики будут это делать.  Хотя плюсы есть неоспоримые.

Я б например мог запускать фоновые расчёты в ОнТаймер, с небольшой частотой (порядка раз в 5 сек) длительностью в половину периода таймера. И было бы не нужно беспокоиться об обработке тиков, которые могли бы просто прерывать фоновый расчёт, а затем корректно возвращать его на законное место. А сейчас проще вынести его на отдельный чарт, чем корректно обработать в том же потоке в котором тики тикают. Хотя времени на всех бы хватило в том же потоке.

 
pusheax:
Например если в обработчике OnTick кто-то поставит Sleep(100000); что ж теперь OnTimer, OnTrade вообще не жить что ли?

события от таймера, и новых тиков будут проигнорированы. торговое событие останется в очереди и будет обработано

Не путайте события Tick, Trade, Timer и их обработчики OnTick, OnTrade, OnTimer

 
pusheax:
Например если в обработчике OnTick кто-то поставит Sleep(100000); что ж теперь OnTimer, OnTrade вообще не жить что ли?
Вот сейчас именно так и есть. Но суицид дело несложное.  Хуже когда на экране мессадж-бокс, а я на кухне чай пью. Юрич тонко подметил.
 
stringo:
Вооще-то Yurich описал именно прерывание в классическом смысле, а не обработку прерываний OnTick, OnTimer

Я понимаю что он описал.

Заниматься синхронизацией  данных и разруливать доступ в однопоточном приложении это верх маразма.

 
MetaDriver:
Вот сейчас именно так и есть. Но суицид дело несложное.  Хуже когда на экране мессадж-бокс, а я на кухне чай пью. Юрич тонко подметил.
А, вот теперь я понял, само событие Timer произойдет но вот его обработка OnTimer будет отложена пока не завершится OnTick.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
pusheax:
Так небось так и работает.
если бы :)