タイマー - ページ 3

 
TheXpert:

タイマーマネージャーを使う記事を書きたかったのに、横道にそれてしまった。記事としては物足りないかもしれませんが。

シングルスレッド・コードとイベント・キューのため特定の時間で取得することはできませんが、平均して1秒未満の誤差で取得できます(最大値はコードによるイベント実行の 最大時間によって 制限されます)。

さらに言えば、タイマーは1つしかない。

必要ですか?

そう、誤差はほとんどないのです。もしかして、Code Baseに一度にアップロードしたい?フォーラムで迷子になり、そこで誰かが必要とすることになる。
 
Yedelkin:
はい、誤差はほとんど感じません。いっそのこと、Code Baseに載せてはどうだろうか。フォーラムで行方不明になり、誰かが必要とすることになるのです。

まだ完成していません、5のファイルアンリミテッドで忙しいのです。もうすぐ終わります。

要は、必要かどうかということではないんです。これが、複数のタイマーを扱う唯一の正常で正しい方法です。

 
TheXpert:

まだ完成していません、5のファイルアンリミテッドで忙しいのです。もうすぐ終わります。

大丈夫です、待ちます。SDに問い合わせてみます。もしかしたら、最初のTimer イベントを一定の遅れで開始できるようにしてくれるかもしれませんね。
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
Yedelkin:

EAに 特定の時刻に タイマー イベントを発生させる方法は ありますか?例えば、1時間や1日の最後の1分間の始まりに。

何が問題なのか?通常のタイマーを作動させ、時間を分析する。時間が合わない場合は、すぐにOnTimerを退会してください。
 
TheXpert:

これもターキーに搭載されているスリープ機能の代用として、やはり1秒はちょっと多いですね。

テーマは自由です。いかがでしょうか?

ひとつだけニュアンスがあります。インジケーターのタイマーは、チャートに貼り付けていないと 機能しません。そのため、インジケータではセカンドタイマも役に立たないことが多い。

ここでは、1秒未満のイベントを監視するためのソリューションを紹介します。おそらく、タイマはGetTickCount()と連動してできるのでしょう。

 
stringo:
何が問題なのか?通常のタイマーを動かして、時間を解析する必要があります。時間が合わない場合は、OnTimerを一旦終了してください。

また、OnTimer()を1日1回(1時間ごとなど)、ある時刻に実行したいのに、なぜ、毎秒のTimerイベントでキューをあふれさせ、OnTimer()を毎秒チェックするために時間を浪費しなければならないのでしょうか?

この関数を2つのパラメータで使用する方が、はるかに合理的でエレガントだと思うのです。

   bool EventSetTimer(
                   int seconds,      // количество секунд для OnTimer
                   int задержка=0     // количество секунд задержки запуска первого события Timer 
                   );

それはSDが提案したことだ。

追加:遅延 パラメータの値は、OnInit()の中で簡単に一度だけ 計算することができます。

 
Yedelkin:

そして、なぜ...

まあ、実は、そういうことを言いたかったんです。ただ、便利なパッケージに包まれただけです。

特に不要なイベントを飛ばすと、1秒に1回は怖いくらいに微々たるものです。

 
秒単位の遅延をミリ秒に変換すればいいだけです。
bool EventSetTimer(1000);// количество миллисекунд для 1 секунды задержки для OnTimer

とこれです。

int задержка=0     // количество секунд задержки запуска первого события Timer 

は、デタラメにしかならないので、一切やらないようにします。

 
pusheax:

int задержка=0     // количество секунд задержки запуска первого события Timer 

は、デタラメにしかならないので、一切やらないようにします。

デタラメ専門家として聞いてみる。この遅延(int delay=0)はどのような考えで、どのような目的で(delay)提案されたのでしょうか?どのように理解されたのでしょうか?

また、2つ目の質問として、 OnTimerの1秒間の遅延のためのミリ秒数」を指定することに何の意味があるのか、はっきりさせたいと思います。どのような目標を達成しようとしているのでしょうか?例えば、OnTimerの毎秒を3ミリ秒遅らせるには?

 
TheXpert:

まあ、実は、そういうことを言いたかったんです。ただ、便利なパッケージに包まれただけです。

特に不要なイベントをスキップすると、1秒に1回というのは恐ろしいほどの微々たるものです。

ご承知のように、この場合、私のモットーは、「悪人なしでもいいなら、悪人はすべて倒せ」です。必要なのは、端末レベルでの最初のタイマーイベントの 発生を、ユーザーが選択した時間だけ遅らせることができるようにすることだけです。このように、私はあなたのコードの重要性を軽視しているわけではありません。
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5