Qualcuno si è imbattuto in una soluzione multi-timer in modo da non dover reinventare la ruota da solo? Non mi sembra che l'implementazione sia complicata dall'uso di puntatori alla funzione. È improbabile che non sia già stato attuato prima di me. Cioè, il compito originale è quello di creare un timer con qualsiasi periodicità e assegnargli la funzione di gestione degli eventi del timer. E ci può essere un numero qualsiasi di timer.
Come questo:
#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); // удаляем этот таймер
}
Cioè il compito iniziale è quello di creare un timer con qualsiasi periodicità e mappare la sua funzione di gestione degli eventi del timer su di esso. E ci può essere un numero qualsiasi di timer.
1. Включите в свою программу класс CTimer 2. Создайте один объект класса СTimer. Например timers. 3. Создайте функции-обработчики необходимых таймеров формата void AnyNameFunction() {....} например с такими именами: 4. Когда вам необходимо создать и запустить таймер, сделайте так из любого места: 5. Когда вам таймер больше не нужен...
Vladimir Simakov: L'oggetto deve contenere un puntatore a una classe con un timer.
La domanda è come eseguire un metodo non statico della classe dal puntatore, anche se l'oggetto di un'altra classe (in questo caso CTimer) è una proprietà (variabile) di quella classe. È possibile. Temo di no.
Qualcuno si è imbattuto in una soluzione multi-timer in modo da non dover reinventare la ruota da solo?
Non mi sembra che l'implementazione sia complicata dall'uso di puntatori alla funzione. È improbabile che non sia già stato attuato prima di me.
Cioè, il compito originale è quello di creare un timer con qualsiasi periodicità e assegnargli la funzione di gestione degli eventi del timer. E ci può essere un numero qualsiasi di timer.
Come questo:
Nessuno ha trovato una soluzione multi-timer
Sono sicuro di averlo visto al Buy More molto tempo fa.
Non riesco a trovarlo. Strano.
OK, lo implementerò io stesso. Non dovrebbe esserci nessuna insidia. Lo posterò al Buy More.
Cioè il compito iniziale è quello di creare un timer con qualsiasi periodicità e mappare la sua funzione di gestione degli eventi del timer su di esso. E ci può essere un numero qualsiasi di timer.
la variante più semplice non va bene?
UPD: E così, potete usare il codice di fxsaber come modello
ecco come fare in modo che tutti gli oggetti vengano automaticamente cancellati https://www.mql5.com/ru/forum/325418/page4#comment_16116740
Non riesco a trovarlo. Strano.
OK, lo implementerò io stesso. Non dovrebbe esserci nessuna insidia. Lo metterò nel Buy More.
fatto
https://www.mql5.com/ru/code/31306
una versione più semplice non funzionerebbe?
UPD: altrimenti, puoi usare il codice di fxsaber come modello
ecco come fare in modo che tutti gli oggetti vengano automaticamente cancellati https://www.mql5.com/ru/forum/325418/page4#comment_16116740
Certo, si potrebbe fare così. Ma meno leggibile e più difficile da gestire.
fatto
https://www.mql5.com/ru/code/31306
C'era una volta (più o meno) questo.
È scomodo da usare con le classi.
class CWithTimer {
public:
void CallMeByTimer();
};
E il timer esterno (alla classe) con puntatori alla funzione è impotente.
una volta (all'incirca) lo faceva.
È scomodo da usare con le classi.
class CWithTimer {
public:
void CallMeByTimer();
};
E il timer esterno (alla classe) con puntatori alla funzione è impotente.
Se intendi la funzione come metodo di classe, allora sì, sono d'accordo. L'ho capito da solo ieri e sono perplesso su come uscirne.
L'oggetto deve contenere un puntatore a una classe con un timer.