Est-ce que quelqu'un a trouvé une solution pour un minuteur multiple afin que je ne doive pas réinventer la roue moi-même ? Je ne pense pas que la mise en œuvre soit compliquée par l'utilisation de pointeurs vers la fonction. Il est peu probable qu'elle n'ait pas déjà été mise en œuvre avant moi. En d'autres termes, la tâche initiale consiste à créer une minuterie avec une périodicité quelconque et à lui attribuer la fonction de traitement des événements de la minuterie. Et il peut y avoir un nombre quelconque de minuteries.
Comme ça :
#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); // удаляем этот таймер
}
En d'autres termes, la tâche initiale consiste à créer une minuterie avec une périodicité quelconque et à lui affecter la fonction de traitement des événements de la minuterie. Et il peut y avoir un nombre quelconque de minuteries.
1. Включите в свою программу класс CTimer 2. Создайте один объект класса СTimer. Например timers. 3. Создайте функции-обработчики необходимых таймеров формата void AnyNameFunction() {....} например с такими именами: 4. Когда вам необходимо создать и запустить таймер, сделайте так из любого места: 5. Когда вам таймер больше не нужен...
Un timer externe (à la classe) avec des pointeurs vers la fonction est impuissant.
Si vous voulez dire la fonction comme une méthode de classe, alors oui, je suis d'accord. Je m'en suis rendu compte hier et je suis perplexe quant à la manière de procéder.
Je voudrais utiliser cette classe à l'intérieur d'une autre classe, sinon l'utilisation est très limitée.
Au moins un singleton doit encore être implémenté et un timer déjà en cours d'exécution en dehors de la classe doit être contrôlé.
Nikolai Semko: Si vous voulez dire fonction comme méthode de classe, alors oui, je suis d'accord. Je l'ai découvert moi-même hier et je me demande comment en sortir.
Je voudrais appliquer cette classe à l'intérieur d'une autre classe, sinon l'application est très limitée.
Au minimum, nous devons implémenter un singleton et contrôler le timer déjà en cours d'exécution en dehors de la classe.
Il devrait y avoir un pointeur vers la classe avec le timer dans l'objet.
Vladimir Simakov: L'objet doit contenir un pointeur vers une classe avec un timer.
La question est de savoir comment exécuter une méthode non statique de la classe à partir du pointeur, même si l'objet d'une autre classe (dans ce cas CTimer) est une propriété (variable) de cette classe. C'est possible. J'ai bien peur que non.
Est-ce que quelqu'un a trouvé une solution pour un minuteur multiple afin que je ne doive pas réinventer la roue moi-même ?
Je ne pense pas que la mise en œuvre soit compliquée par l'utilisation de pointeurs vers la fonction. Il est peu probable qu'elle n'ait pas déjà été mise en œuvre avant moi.
En d'autres termes, la tâche initiale consiste à créer une minuterie avec une périodicité quelconque et à lui attribuer la fonction de traitement des événements de la minuterie. Et il peut y avoir un nombre quelconque de minuteries.
Comme ça :
Personne n'a trouvé de solution à plusieurs temps
Je suis sûr de l'avoir vu au Buy More il y a longtemps.
Je n'arrive pas à le trouver. Étrange.
OK, je vais l'implémenter moi-même. Il ne devrait pas y avoir d'embûches. Je l'afficherai sur le Buy More.
En d'autres termes, la tâche initiale consiste à créer une minuterie avec une périodicité quelconque et à lui affecter la fonction de traitement des événements de la minuterie. Et il peut y avoir un nombre quelconque de minuteries.
une variante plus simple ne fera pas l'affaire ?
UPD : Et donc, vous pouvez utiliser le code de fxsaber comme un modèle
voici comment faire en sorte que tous les objets soient automatiquement supprimés https://www.mql5.com/ru/forum/325418/page4#comment_16116740
Je n'arrive pas à le trouver. Bizarre.
OK, je vais l'implémenter moi-même. Il ne devrait pas y avoir d'embûches. Je vais le mettre dans le Buy More.
fait
https://www.mql5.com/ru/code/31306
une version plus simple ne fonctionnerait pas ?
UPD : sinon, vous pouvez utiliser le code de fxsaber comme modèle.
voici comment faire en sorte que tous les objets soient automatiquement supprimés https://www.mql5.com/ru/forum/325418/page4#comment_16116740
Bien sûr, vous pourriez le faire de cette façon. Mais moins lisible et plus difficile à gérer.
fait
https://www.mql5.com/ru/code/31306
Il était une fois (à peu près) ce que je faisais.
C'est peu pratique à utiliser avec les classes.
class CWithTimer {
public:
void CallMeByTimer();
};
Un timer externe (à la classe) avec des pointeurs vers la fonction est impuissant.
Il était une fois (à peu près) le cas.
C'est peu pratique à utiliser avec les classes.
class CWithTimer {
public:
void CallMeByTimer();
};
Un timer externe (à la classe) avec des pointeurs vers la fonction est impuissant.
Si vous voulez dire fonction comme méthode de classe, alors oui, je suis d'accord. Je l'ai découvert moi-même hier et je me demande comment en sortir.
L'objet doit contenir un pointeur vers une classe avec un timer.