Никто не встречал решение по мульти таймеру, чтобы самому не изобретать велосипед? Реализация мне видится не сложной через применение указателей на функцию. Вряд ли до меня это бы не было уже реализовано. Т.е. исходная задача - создавать таймер с любой периодичностью и сопоставлять ему свою функцию обработки события таймера. Причем таймеров может быть любое количество.
примерно так:
#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. Когда вам таймер больше не нужен...
Vladimir Simakov: В объекте должен быть указатель на класс с таймером.
Вопрос в том, как по указателю запустить нестатический метод класса, даже если объект другого класса (в данном случае CTimer) является свойством(переменной) этого класса. И возможно ли это. Боюсь что нет.
Никто не встречал решение по мульти таймеру, чтобы самому не изобретать велосипед?
Реализация мне видится не сложной через применение указателей на функцию. Вряд ли до меня это бы не было уже реализовано.
Т.е. исходная задача - создавать таймер с любой периодичностью и сопоставлять ему свою функцию обработки события таймера. Причем таймеров может быть любое количество.
примерно так:
Никто не встречал решение по мульти таймеру
Уверен, что видел в КБ давно.
что-то не могу найти. Странно.
ладно, сам реализую. Вроде никаких подводных камней не должно быть. Выложу в КБ
Т.е. исходная задача - создавать таймер с любой периодичностью и сопоставлять ему свою функцию обработки события таймера. Причем таймеров может быть любое количество.
проще вариант не пойдет?
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();
};
и внешний (по отношению к классу) таймер с указателями на функцию бессилен.
Если Вы имеете в виду функцию, как метод класса, то да, согласен. Вчера сам это понял и ломаю голову, как выкрутится.
В объекте должен быть указатель на класс с таймером.