Erreurs, bugs, questions - page 1538

 
Vladislav Andruschenko:

Chers développeurs.

Build 1281 MT5 Windows 7 64

J'ai reçu une mise à jour aujourd'hui


Le processus semble être sans fin :-)

après le redémarrage veut redémarrer à nouveau et ainsi de suite

2016.03.30 10:33:31.903 Réseau '3143179' : la négociation a été activée - mode de compensation.

2016.03.30 10:33:31.903 Réseau '3143179' : terminal synchronisé avec MetaQuotes Software Corp.

2016.03.30 10:33:31.829 Réseau '3143179' : autorisé sur MetaQuotes-Demo via Access Point EU Frankfurt (ping : 70.19 ms)

2016.03.30 10:33:31.759 LiveUpdate nouveau terminal build 1286 (IDE : 1286, Tester : 1286) est disponible

Apportez les registres complets.
 
2016.03.30 10:48:54.402 Network '3143179': trading has been enabled - netting mode
2016.03.30 10:48:54.402 Network '3143179': terminal synchronized with MetaQuotes Software Corp.
2016.03.30 10:48:54.301 Network '3143179': previous successful authorization performed from  on 2016.03.30 10:33:30
2016.03.30 10:48:54.301 Network '3143179': authorized on MetaQuotes-Demo through Access Point EU Frankfurt (ping: 70.19 ms)
2016.03.30 10:48:54.230 LiveUpdate      new terminal build 1286 (IDE: 1286, Tester: 1286) is available
2016.03.30 10:48:54.021 MQL5.community  activated for 'Vladon', balance: 98.50
2016.03.30 10:48:53.122 Terminal        G:\РАБОТА\expforex\!!!$$$---MQL5---!!!\ROBOFOREX MT5
2016.03.30 10:48:53.122 Terminal        Windows 7 Ultimate (x64 based PC), IE 11.00, Intel Core i7-6700  @ 3.40 GHz, RAM: 21297 / 32684 Mb, HDD: 9730 / 1498122 Mb, GMT+02:00
2016.03.30 10:48:53.115 Terminal        MetaTrader 5 - RoboForex x64 build 1281 started (ROBOFOREX LP)
 
Vladislav Andruschenko:
Ces journaux ne sont pas complets. Écrivez à Servicedesk.
 
comp:

Est-il vrai que lorsqu'un indicateur est supprimé manuellement alors que OnCalculate est en cours d'exécution, OnDeinit est exécuté immédiatement, parfois simultanément avec OnCalculate, qui n'est pas encore terminé ?

Cela semble être le cas. Une classe possède un tableau dynamique d'instances d'une autre classe qui est libéré dans le destructeur.

Le destructeur n'est appelé que dans OnDeinit par delete.

Ainsi, lorsque je le décoche pendant OnCalculate, le tableau mentionné ci-dessus commence à se vider, comme si quelqu'un avait appelé le destructeur. Ce quelqu'un - OnDeinit.

En conséquence, j'obtiendrai NULL au lieu d'instances de la classe.

J'ai essayé d'utiliser _StopFlag dans OnCalculate, mais cela ne m'aide pas.

Comment faire pour que OnDeinit ne soit pas exécuté pendant l'exécution de OnCalculate mais après ?

Si je supprime delete de OnDeinit, je n'obtiens plus NULL. Mais dans le journal, j'ai une fuite de mémoire logique. Donc c'est certainement OnDeinit. J'ai essayé d'y mettre du sommeil. Mais il semble que le sommeil ne fonctionne pas dans les indicateurs. J'ai même essayé comme ça

  void MySleep( const uint Pause ) const
  {
    const uint StartTime = GetTickCount();
    
    while(GetTickCount() - StartTime < Pause)
      ;
      
    return;
  }

L'indicateur semble également ignorer ce point.

 
comp:

J'utilise des macros prédéfinies lors du débogage. Est-il également possible de trouver facilement qui a appelé la fonction/méthode sans lui passer le paramètre correspondant ?

Vous ne pouvez pas utiliser les outils MQL intégrés, vous devez le faire vous-même, par exemple, pour la version de débogage, ajoutez le paramètre "nom de la fonction appelée".
 
comp:

Cela semble être le cas. La classe possède un tableau dynamique d'instances d'une autre classe, qui est libéré dans le destructeur.

Le destructeur est appelé uniquement dans OnDeinit via delete.

Ainsi, lorsque je le décoche pendant OnCalculate, le tableau mentionné ci-dessus commence à se vider, comme si quelqu'un avait appelé le destructeur. Ce quelqu'un - OnDeinit.

En conséquence, j'obtiendrai NULL au lieu d'instances de la classe.

J'ai essayé d'utiliser _StopFlag dans OnCalculate, mais cela ne m'aide pas.

Comment faire pour que OnDeinit ne soit pas exécuté pendant l'exécution de OnCalculate mais après ?

Si je supprime delete de OnDeinit, je n'obtiens plus NULL. Mais dans le journal, j'ai une fuite de mémoire logique. Donc c'est certainement OnDeinit. J'ai essayé d'y mettre du sommeil. Mais il semble que le sommeil ne fonctionne pas dans les indicateurs. J'ai même essayé comme ça

L'indicateur semble ignorer cela aussi.

Veuillez ouvrir une demande auprès de Servicedesk et donner le code de la fonction OnDeinit.
 
Ilyas:
Veuillez ouvrir une demande auprès de servicedesk et me donner le code de la fonction OnDeinit.

Pouvez-vous me conseiller sur la façon de faire fonctionner artificiellement OnCalculate pendant une longue période ? C'est une déception avec le glissement.

Il ne joue que dans les indicateurs complexes (beaucoup de calculs). Lorsque je supprime les calculs, tout va bien, car OnCalculate est exécuté presque instantanément.

 
comp:

Comment faire pour que OnDeinit s'exécute après OnCalculate au lieu de le faire pendant ?


OnDeinit est toujours exécuté après OnCalculate.
 
comp:

Pouvez-vous me conseiller sur la façon de faire fonctionner artificiellement OnCalculate pendant une longue période ? C'est une déception avec le glissement.

Il ne joue que dans les indicateurs complexes (beaucoup de calculs). Lorsque je supprime les calculs, tout va bien, car OnCalculate est exécuté presque instantanément.

#import "kernel32.dll"
    void Sleep(uint);
#import



 kernel32::Sleep(10000);
 
Ilyas:
Merci, je n'ai pas réussi à le reproduire avec un exemple simple. Seul l'indicateur est trop lent, 10015 ms. réécrire l'indicateur, s'il vous plaît. Je vais réfléchir à un exemple pour reproduire le problème.

Raison: