タイマー - ページ 6

 
Yurich:
割り込みとは、OnTickが実行されているときに、OnTimerなどのより重要なイベントが到来した場合です。OnTickが一時停止し、OnTimerのコードが実行され、その後、OnTickが再び実行され続けます。
やれやれ。これはひどい夢だ。
 
pusheax:

OnTimer, OnTick, OnTrade...これが割り込みです。

最初はそう思っていたんです。しかし、バリエーションがある。例えば、あるOnTimerにinterruptsという言葉をつけて、それがイベント発生の瞬間に正確に呼ばれ、他のイベントの処理が中断されることを知ることはできません(MSDOSのシングルスレッド方式、スタック保存、割り込み処理、スタック回復、制御移行)。 この方式なら、もっと簡単な方法で多くの問題を解決できるはずです。例えば、この方式で呼び出されたOnTickは、なかなかいい感じです。微妙なところでは、繰り返し入力の処理が必要になりますが(例えば、小さなギャップのある2つのティック)、一般的には解決可能です。
 
TheXpert:
クソッタレこれは悪い夢だ。
実際、YurichはOnTickやOnTimerの割り込み処理ではなく、古典的な意味での割り込みについて説明しています。
 
例えば、OnTick ハンドラでSleep(100000) を設定した場合、OnTimer、OnTrade は全く機能しないのでしょうか?
 
TheXpert:
ガッカリだ。そうですね......怖い夢です。

いや、怖くはない。前髪を避ける方法については、古くから試行錯誤が行われています。

しかし、まだ夢物語です。 開発者がやるとは思えません。 メリットは否定できませんが。

例えば、OnTimerの中で、タイマーの半分の周期で小さな頻度(5秒に1回程度)でバックグラウンドの計算を実行することができます。また、ティックの処理に悩まされることもなく、バックグラウンドでの計算を中断し、正しく元の場所に戻すだけでよいのです。そして今、カチカチと音がする同じスレッドで正しく処理するよりも、別のチャートに載せる方が簡単なんです。同じスレッドに全員分の時間があるだろうが。

 
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:
そういうことなのでしょう。
もしそうなら :)