Erreurs, bugs, questions - page 1509
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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 ?
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 :
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é.
...
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.
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.
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 la structure par référence
comme
Il me semble que ce n'est pas un bon choix.
Que pouvons-nous faire ?
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 ?
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.
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.
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é