#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. Когда вам таймер больше не нужен...
有谁遇到过一个多定时器的解决方案,使我不必自己重新发明轮子?
我不认为使用指向一个函数的指针会使实现变得复杂。在我之前,不太可能还没有实施。
也就是说,最初的任务是创建一个具有任何周期的定时器,并为其分配一个函数来处理 定时器事件。而且可以有任何数量的定时器。
像这样。
没有人遇到过一个多定时器的解决方案
我确信我很久以前就在 "多买 "看到过它。
我找不到它。奇怪。
,好吧,我自己来实现它。应该不会有什么隐患。我将在 "购买更多 "中公布。
也就是说,最初的任务是创建一个具有任何周期的计时器,并将其计时器事件处理函数 映射到它。而且可以有任何数量的定时器。
更简单的变体不会做?
UPD:因此,你可以使用fxsaber 代码作为模板
这里是如何使所有对象自动删除的方法https://www.mql5.com/ru/forum/325418/page4#comment_16116740
我找不到它。奇怪。
,好吧,我自己来实现它。应该不会有什么隐患。我把它放在 "购买更多 "中。
完成
https://www.mql5.com/ru/code/31306
一个更简单的版本就不能用了?
UPD:否则,你可以使用fxsaber 代码作为模板
下面是如何使所有对象自动删除的方法https://www.mql5.com/ru/forum/325418/page4#comment_16116740
当然,你可以这样做。但可读性较差,而且更难管理。
制作
https://www.mql5.com/ru/code/31306
从前(大概)是这样的。
它不方便与班级一起使用。
class CWithTimer {
public:
void CallMeByTimer();
};
而外部(对类)的计时器与指向该函数的指针是无力的。
曾几何时(大概)是这样做的。
它不方便与班级一起使用。
class CWithTimer {
public:
void CallMeByTimer();
};
而外部(对类)的计时器与指向该函数的指针是无力的。
如果你是指作为类方法 的功能,那么是的,我同意。昨天自己想明白了,正在琢磨如何摆脱它。
该对象必须有一个指向具有定时器的类的指针。