Minuterie - page 3

 
TheXpert:

Utilisation du gestionnaire de temporisation. Je voulais écrire un article, mais j'ai été détourné. Même si ce n'est pas suffisant pour un article.

Vous ne l'obtiendrez pas en un temps précis à cause du code monofil et de la file d'attente des événements, mais avec une erreur moyenne inférieure à une seconde (le maximum est limité par le temps maximal d'exécution des événements par le code).

D'autant plus qu'il n'y a qu'un seul chronomètre.

En avez-vous besoin ?

Oui, la marge d'erreur est presque imperceptible. Vous voulez peut-être le télécharger sur Code Base en une seule fois ? Il se perdra sur le forum, et quelqu'un d'autre en aura besoin.
 
Yedelkin:
Oui, l'erreur est presque imperceptible. Pourquoi ne pas le mettre tout de suite dans le Code Base ? Il se perdra sur le forum, et quelqu'un d'autre en aura besoin.

Pas tout à fait terminé, je suis occupé avec mon Fichier illimité pour 5. J'aurai bientôt fini.

La question n'est pas de savoir si nous en aurons besoin ou pas. C'est la seule façon normale et correcte de travailler avec plusieurs minuteries.

 
TheXpert:

Pas tout à fait terminé, je suis occupé avec mon Fichier illimité pour 5. J'aurai bientôt fini.

C'est bon, on va attendre. Je vais contacter SD, peut-être qu'ils permettront de lancer le premier événement Timer avec un certain délai.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
Yedelkin:

Existe-t-il un moyen de faire en sorte que l'EA génère des événements de type Timer à un moment précis ? Par exemple, au début de la dernière minute de l'heure ou de la journée.

Quel est le problème ? Faites fonctionner un minuteur normal et analysez le temps. S'il ne correspond pas à l'heure, quittez immédiatement OnTimer.
 
TheXpert:

Là encore, il s'agit d'un excellent substitut à la fonction Sleep des dindes, et là encore, une seconde est un peu trop.

Le sujet est ouvert à la discussion. Qu'en pensez-vous ?

Il y a une nuance. La minuterie de l'indicateur ne fonctionne pas si elle n'est pas attachée au graphique. Par conséquent, même une deuxième minuterie est souvent inutile dans les indicateurs.

Voici une solution pour surveiller les événements de moins d'une seconde. Peut-être qu'une minuterie peut être réalisée en conjonction avec GetTickCount().

 
stringo:
Quel est le problème ? Vous devez lancer une minuterie normale et analyser le temps. Si l'heure ne convient pas, quittez immédiatement OnTimer.

Et pourquoi devrais-je bombarder la file d'attente d'événements Timer toutes les secondes et perdre mon temps à vérifier OnTimer() toutes les secondes, si je veux exécuter OnTimer() une fois par jour (par heure, etc.) mais à une certaine heure ?

Je pense qu'il serait beaucoup plus rationnel et élégant d'utiliser cette fonction avec deux paramètres :

   bool EventSetTimer(
                   int seconds,      // количество секунд для OnTimer
                   int задержка=0     // количество секунд задержки запуска первого события Timer 
                   );

C'est ce que le SD a suggéré.

Ajout : la valeur du paramètre de délai peut être calculée facilement et une seule fois dans OnInit().

 
Yedelkin:

Et pourquoi...

Eh bien, en fait, c'est ce que je suggérais. Juste emballé dans un paquet pratique.

Une fois par seconde, c'est une somme dérisoire, surtout si vous sautez des événements inutiles.

 
Il suffit de convertir le délai en secondes en millisecondes.
bool EventSetTimer(1000);// количество миллисекунд для 1 секунды задержки для OnTimer

et ceci.

int задержка=0     // количество секунд задержки запуска первого события Timer 

de ne pas le faire du tout, car c'est juste des conneries.

 
pusheax:

int задержка=0     // количество секунд задержки запуска первого события Timer 

de ne pas le faire du tout, car c'est juste des conneries.

Je vais demander en tant qu'expert en conneries. Quelle est l'idée derrière ce délai(int delay=0), et dans quel but a-t-il été suggéré (délai) ? Comment l'avez-vous compris ?

Et la deuxième question que je veux clarifier, quel est l'intérêt de spécifier"nombre de millisecondes pour un délai de 1 seconde pour OnTimer" ? Quel objectif cherchez-vous à atteindre ? Par exemple, pour retarder de trois millisecondes chaque seconde dans OnTimer ?

 
TheXpert:

Eh bien, en fait, c'est ce que je suggérais. Juste emballé dans un paquet pratique.

Une fois par seconde, c'est une somme dérisoire, surtout si vous sautez des événements inutiles.

Comme vous le comprenez, dans ce cas, ma devise est : "A bas tous les misérables si vous pouvez vous en passer". La seule chose que vous devez faire est de permettre de retarder la génération du premier événement Timer au niveau du terminal pour le temps choisi par un utilisateur. Ainsi, je ne minimise pas l'importance de votre code, d'autant plus que je ne l'ai tout simplement pas vu.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
Raison: