Flux d'événements. Comment contrôler et rendre l'événement inactif ? (+ résolu) - page 5

 
Yedelkin:

OK, je vois.TheXpert a fait une vague et le problème a commencé.

C'est une vraie déception pour vous. C'est ma faute si tu ne peux pas communiquer avec les gens ?

Le Conseiller expert a une consommation de mémoire fixe, si

(1) pas d'émulation de tampon

(2) pas de dessin d'objets sur l'histoire.

(3) aucun bug d'allocation de mémoire. Mais cela se produit généralement avec deinit.

(4) il n'y a pas de bogue dans le travail avec les indices. Si un indicateur a un tampon de taille complète, il s'agit d'un bogue.

S'il y a (1) ou (2) le brûlage est facile à suivre avec le testeur + le répartiteur. Il est traité par le contrôle de la taille.

Les événements en eux-mêmes ne consomment pas du tout de mémoire (par ordre croissant). Par conséquent, s'il n'y a pas de problème dans le conseiller expert, le problème se situe certainement dans l'indicateur.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
TheXpert:

Dans une EA, la consommation de mémoire est fixée si

(1) il n'y a pas d'émulation de tampon

(2) il n'y a pas de dessin d'objets sur l'historique.

(3) aucun bug d'allocation de mémoire. Mais ceci est généralement observé avec la désinitération.

(4) aucun bug de travailler avec des indulgateurs. Si un indicateur a un tampon de taille complète, c'est un bogue.

Si vous avez (1) ou (2), il est facile de tracer la surcharge avec le testeur et le répartiteur. Il peut être traité avec un contrôle de la taille.

Les événements eux-mêmes ne consomment pas du tout de mémoire (ordre croissant). Par conséquent, si le conseiller expert n'a aucun problème, le problème se situe certainement dans l'isolateur.

Merci beaucoup pour cette réponse détaillée. Je vais y réfléchir. (1) - (3) ne l'est certainement pas.

A propos du point (4), veuillez expliquer : qu'est-ce que cela signifie "si l'indicateur fait passer le tampon à sa taille maximale", pour ne pas se perdre en conjectures.

A propos de "S'il y a (1) ou (2) brûlure il est facile de la tracer par le testeur + gestionnaire" je demande de préciser : c'est-à-dire que vous suggérez d'utiliser le testeur non seulement pour la mesure de la vitesse du programme, mais aussi pour la mesure du volume consommé ? Yep ; une solution si simple, qui ne m'a jamais effleuré l'esprit !

Plus loin. Il s'avère que si un Conseiller Expert est construit en utilisant des objets dynamiques, il ne peut pas avoir de mémoire fixe. D'un autre côté, il n'y a pas de rapports de fonctionnement incorrect avec des objets dynamiques ; combien de fois ai-je supprimé et lancé le Conseiller Expert...

Quoi qu'il en soit, mon remue-méninges m'a suggéré une idée triviale : si je ne peux pas séparer les volumes des programmes fonctionnant ensemble, je dois les exécuter séparément et voir comment leur consommation augmente. Le conseiller expert doit être lancé non pas à partir de son indicateur personnalisé, mais, supposons-le, à partir des ticks de son propre graphique. Compte tenu de votre indication concernant le testeur qui mesure le volume, tout semble être en ordre. C'est peut-être ce que Roche voulait dire en faisant référence à l'article... ? Mais tout de même, en relisant l'article, une telle pensée ne m'est pas venue à l'esprit. Pas sans indice !

LeXpert :

Tu me rends folle. Suis-je aussi à blâmer pour ton incapacité à communiquer avec les gens ?

La culpabilité est la culpabilité, la vague est la culpabilité :)

Et j'ai déjà compris votre point de vue sur mon extrême impolitesse et je me suis excusé par avance :) Malgré tout, mon impolitesse me dit qu'il est plus productif de parler pour moi, plutôt que pour les gens :) Nous ne sommes pas à la Douma d'État :)

 
Yedelkin:

Concernant le point (4), veuillez expliquer ce que signifie "si l'indicateur a un tampon de taille complète" afin de ne pas se perdre en conjectures.

Ce que je veux dire, c'est que si le graphique comporte, disons, 100 000 barres et que le conseiller expert utilise une mémoire tampon pour les 100 000 barres, ce n'est pas correct.

A propos de "S'il y a (1) ou (2) il est facile de tracer la combustion par le testeur + le répartiteur" je demande de préciser : c'est-à-dire que vous proposez d'utiliser le testeur non seulement pour mesurer la vitesse du programme, mais aussi pour mesurer le volume consommé ? Yep ; une solution si simple, qui ne m'a jamais effleuré l'esprit !

Eh bien... Vous voulez dire qu'il faut exécuter le testeur et quelque part (dans le gestionnaire de tâches de Windows par exemple) surveiller l'allocation de la mémoire. Ce n'est pas une méthode très fiable, mais si le problème se trouve dans l'EA, il est fort probable que la consommation de mémoire soit très élevée.

Le brainstorming a donc débouché sur une idée apparemment triviale : si nous ne pouvons pas diviser les volumes de programmes fonctionnant ensemble, nous devons les faire fonctionner séparément et voir qui a la plus grande consommation.

Eh bien, c'est comme ça qu'il a été développé en fait...
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

C'est-à-dire que, par exemple, lorsque vous cliquez sur l'objet, l'événement CHARTEVENT_OBJECT_CLICK ne survient pas immédiatement, mais seulement après le retrait de tous les événements précédents de la file d'attente.
Et comme vous le comprenez, la file d'attente est remplie de l'EventChartCustom.

...

Alex, j'ai maintenant un problème légèrement similaire. C'est-à-dire qu'immédiatement après l'initialisation de l'EA, tout fonctionne bien. Pendant un certain temps, je n'entre pas du tout dans le terminal, j'essaie de passer d'un panneau d'informations utilisateur à un autre et le programme "se bloque". Il peut même se figer pendant quelques secondes jusqu'à ce que le changement se produise. Est-ce le même cas ?

Je n'ai pas encore essayé votre solution, occupé par un autre problème, mais je vais certainement l'essayer, car je n'ai pas trouvé la solution moi-même. Il y a une question jusqu'à présent.

Dans votre exemple, il y a cinq paramètres dans la fonction OnChartEvent (). C'est quoi l'iview?

ulong event_idle=0; bool bidle;
//---
void OnChartEvent(int iview, int id, long lparam, double dparam, string sparam)
  {
    if(id==CHARTEVENT_CUSTOM+VM_IDLE)
      {
        if(event_idle>(ulong)lparam || bidle) // если последнее посланное больше чем пришедшее, то сразу выходим
          {
           bidle=event_idle > (ulong)lparam;
           //---
           if(bidle) return;
           //---
           event_idle=0;
          } 
        event_idle++;
        ChartRedraw(m_chart); // обновили чарт
        EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика
        return; 
      }
    EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика

    /*
        обработка остальных событий
    */
  }
 
tol64:

Alex, j'ai maintenant un problème légèrement similaire. C'est-à-dire que juste après l'initialisation de l'EA, tout fonctionne bien. Pendant un certain temps, je n'entre pas du tout dans le terminal, j'essaie de passer d'un panneau d'information utilisateur à un autre et le programme "se bloque". Il peut même se figer pendant quelques secondes jusqu'à ce que le changement se produise. Est-ce le même cas ?

Oui, c'est celui-là. Vous avez plus d'un EventChart envoyé entre les appels OnChartEvent. Faites le complément que j'ai suggéré pour analyser le numéro de l'événement qui est arrivé et le problème disparaît.

Votre exemple comporte cinq paramètres dans la fonction OnChartEvent (). Qu'est-ce queiview?

Je l'ai accidentellement mis dans l'en-tête de la fonction. Ignorez-le.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Je n'arrive pas à croire à quel point les gens ont de l'énergie). Eh, où sont mes 17 ans !
 

tol64:

sergeev:
.
..

Ainsi, par exemple, lorsque vous cliquez sur un objet, l'événement CHARTEVENT_OBJECT_CLICK ne survient pas immédiatement, mais seulement après que tous les événements précédents ont été supprimés de la file d'attente.
Et comme vous le comprenez, la file d'attente des événements est encombrée de EventChartCustom.

Allez, les gars, lisez le point 1.1 de ce post. Les informations discutées là ont été présentées aujourd'hui, nous pouvons les considérer comme officielles. Eh bien maintenant, il ne peut pas y avoir (dans ce cas) de tels phénomènes comme des événements "précédents" et un "blocage sourd" de la file d'attente par la fonction EventChartCustom. ...Ou nous avons besoin d'une réfutation officielle des nouvelles informations du Manuel.

TheXpert, merci pour cette précision.

 
Yedelkin:

Allez, les gars, lisez le point 1.1 de ce post. Les informations discutées là ont été présentées aujourd'hui, nous pouvons les considérer comme officielles. Eh bien, il ne peut pas (dans ce cas) être maintenant dans la file d'attente des phénomènes tels que les événements "précédents" et le "blocage sourd" de la file d'attente par la fonction EventChartCustom. ...Ou une réfutation officielle de la nouvelle information du Manuel est nécessaire.

Est-ce que c'est comme un cirque qui se déroule ?
 
sergeev:
Est-ce que c'est une sorte de cirque ?

Si vous y voyez un cirque, n'hésitez pas à le supprimer, ou essayez d'y répondre sur le fond.

 
et avez-vous déjà posé une nouvelle question ?