Erreurs, bugs, questions - page 1509

 
Chers développeurs, quel est l'ordre de la fonction OnDeinit - l'ordre de suppression des objets et autres variables, d'effacement de la mémoire, etc.
 
coderex:
Chers développeurs, quel est l'ordre de fonctionnement de la fonction OnDeinit - l'ordre de suppression des objets et autres variables, d'effacement de la mémoire, etc.

OnDeinit est une fonction ordinaire dans MQL4/5 qui est appelée dans certaines situations. C'est ainsi que vous l'avez programmé, donc il en sera ainsi.

Veuillez être plus précis dans votre question. Qu'est-ce qui vous intéresse exactement ?

 
Slawa:

OnDeinit est une fonction ordinaire dans MQL4/5 qui est appelée dans certaines situations. C'est ainsi que vous l'avez programmé, donc il en sera ainsi.

Veuillez être plus précis dans votre question. Qu'est-ce qui vous intéresse exactement ?

Avec les objets qui sont explicitement supprimés (créés dans la mémoire allouée), tout est clair. Ce qui m'intéresse, c'est le processus de libération de la mémoire et de suppression des objets créés dans la mémoire non surveillée.

C'est-à-dire qu'il y a, par exemple, deux objets et une variable d'un type fondamental :

class CFirst {...};
class CSecond {...};

int iVolume = 100;
CFirst first_obj;
CSecond *second_obj;

int OnInit(void) {
   second_obj = new CSecond();
// текст функции OnInit
}
void OnDeinit(const int reason) {
   if(CheckPointer(second_obj == POINTER_DYNAMIC)
      delete second_obj;
}

Je suis intéressé par l'ordre de libération de la mémoire et de suppression de tous les objets, lorsque le programme est supprimé.

 
Slawa:

...

Quand le terminal peut-il geler ? - Il semble y avoir des situations normales où le terminal est censé se bloquer.

D'après ce que j'ai vu, il se bloque toujours (se bloque pendant une période de temps indéfinie) lorsque :

1. Connexion à un serveur.

2. P1. lors du passage d'un compte à l'autre.

3. Pendant le démarrage du terminal.

La dernière fois que le terminal s'est bloqué au démarrage. J'ai regardé dans le gestionnaire des tâches, le terminal a consommé la mémoire octet par octet, après quelques minutes, il a consommé les 8 Go de mémoire et le système d'exploitation s'est arrêté en même temps que le terminal. J'ai dû appuyer sur le bouton "reset" de l'unité centrale.

Après avoir redémarré l'ordinateur, j'ai lancé le terminal - l'histoire du gel s'est répétée, le système a cessé de répondre à mes tentatives frénétiques de le réveiller en même temps que le terminal.

Après avoir redémarré l'ordinateur, j'ai supprimé tous les fichiers de configuration du terminal, je l'ai lancé - histoire avec des hangs à nouveau.

Après avoir redémarré l'ordinateur, j'ai supprimé tous les fichiers d'historique du serveur de commerce et ce n'est qu'après cela que l'ordinateur mobile a commencé à fonctionner normalement, et seulement après avoir réfléchi pendant environ 3 minutes.

Le terminal se bloque de build en build. Win10x64.

 
Joo Zepper:

Quand le terminal peut-il raccrocher ? - Il semble y avoir des situations normales dans lesquelles le terminal est censé se bloquer.

D'après mes observations, le terminal se bloque toujours (se bloque pendant une période de temps indéfinie) lorsque :

1. Connexion à un serveur.

2. P1. lors du passage d'un compte à l'autre.

3. Pendant le démarrage du terminal.

La dernière fois, le terminal a raccroché pendant le démarrage. J'ai regardé dans le gestionnaire des tâches, le terminal a consommé la mémoire octet par octet, après quelques minutes, il a consommé les 8 Go de mémoire et le système d'exploitation s'est arrêté en même temps que le terminal. J'ai dû appuyer sur le bouton "reset" de l'unité centrale.

Après avoir redémarré l'ordinateur, j'ai lancé le terminal - l'histoire du gel s'est répétée, le système a cessé de répondre à mes tentatives frénétiques de le réveiller en même temps que le terminal.

Après avoir redémarré l'ordinateur, j'ai supprimé tous les fichiers de configuration du terminal, je l'ai lancé - histoire avec des hangs à nouveau.

Après avoir redémarré l'ordinateur, j'ai supprimé tous les fichiers d'historique du serveur de commerce et ce n'est qu'après cela que l'ordinateur mobile a commencé à fonctionner normalement, et seulement après avoir réfléchi pendant environ 3 minutes.

Le terminal se bloque de build en build. Win10x64.

Le même vent, le terminal ne démarre qu'à partir de l'admin, et tous les fichiers du metaeditor également à partir de l'admin, aucun problème.
 

C'est la première fois que je rencontre ce type de code, je demande donc aux experts expérimentés comment diviser le code en parties et inclure les fichiers correctement.

Voici un exemple

class WL : public C_Object
  {
private:
   MqlTick           tick;
   struct STRUCT_SYMBOL // Структура символа
     {    
      bool              TRADING_IS_ALLOWED;      // Обновлять
      double            INDIKATOR_VOLUME;        // Обновлять
     };
   struct STRUCT_WATCH_LIST // Структура сохраненных листов
     {
      string            NAME_LIST;
     };
   STRUCT_WATCH_LIST WatchList[];
   STRUCT_SYMBOL     SymbolMass[];
}

C'est-à-dire qu'une classe hérite d'une autre classe et possède une structure ; la structure dans l'exemple, je l'ai abrégée, et ensuite il y a des méthodes pour travailler avec un tableau de la structure

J'ai 40-50 ou peut-être plus de ces méthodes.

Je voudrais déplacer chaque méthode dans le fichier d'inclusion ou organiser la structure du code d'une autre manière, afin de ne pas créer 10 000 à 20 000 lignes de code dans le conseiller expert lui-même, qu'il sera difficile de retrouver par la suite.

La seule chose que je vois pour le moment est d'envoyer un tableau de la structure par référence

comme

func(STRUCT_SYMBOL & str)

Il me semble que ce n'est pas un bon choix.

Que pouvons-nous faire ?

 
coderex:

Je comprends le processus de suppression des objets explicitement supprimés (créés dans la mémoire allouée). Je m'intéresse au processus de libération de la mémoire et de suppression des objets créés dans la mémoire automatique.

Par exemple, il y a deux objets et une variable de type fondamental :

J'aimerais savoir quel ordre de désaffectation de la mémoire et de suppression de tous les objets sera suivi lors de la suppression du programme.

OnDeinit n'a rien à voir avec cela.

Avez-vous lu la documentation ?

 
Vladimir Pastushak:
Le terminal est exécuté uniquement depuis l'administrateur, et tous les fichiers du méta-éditeur sont également depuis l'administrateur, aucun problème.
de l'administration ? ou peut-être que le terminal devrait recevoir un chapeau avec une croix, une pomme d'or et un bâton, et être appelé le très saint roi de toute la Russie ?
 
Vladimir Pastushak:

C'est la première fois que je rencontre ce type de code, je demande donc aux experts expérimentés comment diviser le code en parties et inclure les fichiers correctement.

Voici un exemple

C'est-à-dire qu'une classe hérite d'une autre classe et possède une structure ; la structure dans l'exemple, je l'ai abrégée, et ensuite il y a des méthodes pour travailler avec un tableau de la structure

J'ai 40-50 ou peut-être plus de ces méthodes.

Je voudrais déplacer chaque méthode dans le fichier d'inclusion ou organiser la structure du code d'une autre manière, afin de ne pas créer 10 000 à 20 000 lignes de code dans le conseiller expert lui-même, qu'il sera difficile de retrouver par la suite.

La seule chose que je vois pour le moment est d'envoyer un tableau de structure par référence

comme

Je ne pense pas que ce soit le meilleur choix.

Qu'est-ce que je peux faire ?

Si les classes sont volumineuses, il est préférable de créer une liste séparée pour chaque classe et dans le code où les objets de cette classe sont utilisés, inclure la liste de la classe par le biais de #include. Il en va de même pour les structures et les bibliothèques de fonctions. Si les classes et les structures ne sont pas capacitives, vous pouvez les inclure dans une seule liste. Vous pouvez également créer une liste de définitions et de macros courantes.

Et n'ayez pas peur d'avoir toute une famille de listings liés à un seul programme, c'est courant, j'ai utilisé dans mes systèmes de trading 15-20 listings, plus des répertoires avec des .bmp et .gif pour l'interface. Je distribue tous les listings dans des annuaires séparés. La navigation est plus facile lorsqu'il s'agit de détecter des erreurs et de procéder à des mises à jour.

 
Joo Zepper:

Quand le terminal peut-il raccrocher ? - Il semble y avoir des situations normales dans lesquelles le terminal est censé se bloquer.

D'après mes observations, le terminal se bloque toujours (se bloque pendant une période de temps indéfinie) lorsque :

1. Connexion à un serveur.

2. P1. lors du passage d'un compte à l'autre.

3. Pendant le démarrage du terminal.

La dernière fois que j'ai fait ça, le terminal a gelé au démarrage. J'ai regardé dans le gestionnaire des tâches, le terminal a consommé la mémoire octet par octet, après quelques minutes, il a consommé les 8 Go de mémoire et le système d'exploitation s'est arrêté en même temps que le terminal. J'ai dû appuyer sur le bouton "reset" de l'unité centrale.

Après avoir redémarré l'ordinateur, j'ai lancé le terminal et l'histoire avec les blocages se répète, le système a cessé de répondre à mes tentatives frénétiques de le réveiller avec le terminal.

Après avoir redémarré l'ordinateur, j'ai supprimé tous les fichiers de configuration du terminal, je l'ai lancé - histoire avec des hangs à nouveau.

Après avoir redémarré l'ordinateur, j'ai supprimé tous les fichiers d'historique du serveur de commerce et ce n'est qu'après cela que l'ordinateur mobile a commencé à fonctionner normalement, et seulement après avoir réfléchi pendant environ 3 minutes.

Le terminal se bloque de build en build. Win10x64.

Il n'y a pas de cas normal où le terminal est censé se bloquer.

Le terminal ne devrait pas être suspendu.

Toutes les connexions au serveur et le changement de compte sont effectués dans des threads séparés. L'accrochage signifie que quelque chose ralentit le fil de l'interface.

Le téléchargement de l'historique, d'ailleurs, est aussi effectué dans un fil séparé