#include <Timer.mqh>
CTimer timers;
int x1=0;
int x2=0;
intOnInit()
{
timers.NewTimer(500, Sum1); // создаем новый таймер с периодом обновления 500 милисекунд и функцией-обраточником Sum1()
timers.NewTimer(2000, Sum2); // создаем новый таймер с периодом обновления 2000 милисекунд и функцией-обраточником Sum2()return(INIT_SUCCEEDED);
}
...
voidOnTimer()
{
timers.OnTimer();
}
//+------------------------------------------------------------------+void Sum1() { // данная функция вызывает с периодичностью 500 милисекунд
x1++;
if (x1==10) timers.KillTimer(Sum1); // удаляем этот таймер
}
void Sum2() { // данная функция вызывает с периодичностью 2000 милисекунд
x2++;
if (x2==10) timers.KillTimer(Sum2); // удаляем этот таймер
}
1. Включите в свою программу класс CTimer 2. Создайте один объект класса СTimer. Например timers. 3. Создайте функции-обработчики необходимых таймеров формата void AnyNameFunction() {....} например с такими именами: 4. Когда вам необходимо создать и запустить таймер, сделайте так из любого места: 5. Когда вам таймер больше не нужен...
誰か、マルチタイマーソリューションに出会ったことがありますか?
関数へのポインタを使用することで、実装が複雑になるとは思えません。私の前にすでに実施されていないとは考えられません。
つまり、本来の仕事は、任意の周期でタイマーを作成し、それにタイマーイベントを処理する関数を 割り当てることである。そして、タイマーはいくつあってもいい。
こんな感じ。
マルチタイマーソリューションに出会った人はいない
昔、バイモアで見たことがあるような気がします。
見つからないんです。不思議ですね。
OK、自分で実装してみます。落とし穴はないはずです。バイモアのところに貼っておきますね。
すなわち、最初の作業は、任意の周期性を持つタイマーを作成し、そのタイマーイベント処理関 数をマッピングすることである。そして、タイマーはいくつあってもいい。
よりシンプルなバリエーションではだめなんですか?
UPD: それで、fxsaberの コードをテンプレートとして使用することができます
すべてのオブジェクトが自動的に削除されるようにするには、次のようにします。https://www.mql5.com/ru/forum/325418/page4#comment_16116740
見つからないんです。変だな。
よし、自分で実装してみよう。落とし穴はないはずです。Buy Moreに入れる。
された
https://www.mql5.com/ru/code/31306
もっと簡単なものではだめなのでしょうか?
UPD: そうでなければ、fxsaberの コードをテンプレートとして使用することができます。
すべてのオブジェクトが自動的に削除されるようにするには、次のようにします。https://www.mql5.com/ru/forum/325418/page4#comment_16116740
もちろん、そういうやり方もありますよ。しかし、可読性は低く、管理も難しい。
made
https://www.mql5.com/ru/code/31306
むかしむかし(だいたい)こんなことしてました。
クラスで使うには不便です。
class CWithTimer {
public:
void CallMeByTimer();
};
また,関数へのポインタを持つ外部(クラスへの)タイマは無力です.
むかしむかし(だいたい)そうでした。
クラスで使うには不便です。
class CWithTimer {
public:
void CallMeByTimer();
};
また,関数へのポインタを持つ外部(クラスへの)タイマは無力です.
クラスメソッドとしての 機能ということであれば、そうですね。昨日、自分で気づいて、どうしたらいいのか頭を悩ませているところです。
オブジェクトは、タイマーを持つクラスへのポインターを持つ必要があります。