Programmation asynchrone et multithread dans MQL - page 4

 
Chers utilisateurs du forum.

Pour travailler avec des threads multiples, vous devez d'abord apprendre la différence essentielle entre asynchronie, multithreading et exécution multiprocessus, car vous ne pouvez même pas comprendre votre logique à certains endroits. Tout d'abord.

Deuxièmement, l'appel à la DLL externe demeure et qui vous empêche d'implémenter votre propre bibliothèque avec plusieurs threads et de la brancher ?

Troisièmement, pour quelles tâches avez-vous besoin du multithreading dans mql ?

Sans parler du fait que vous devez encore apprendre les objets de synchronisation. En avez-vous besoin ? Si c'est le cas, il est très facile d'écrire une DLL pour vous.
 
Roman:

Donc l'initialisation dansDLL_PROCESS_ATTACH : sera suffisante pour appeler depuis le programme mql ?

Du programme mql pour appeler ses fonctions situées dans la dll.

 
Dmitry Fedoseev:

Du programme mql pour appeler ses fonctions situées dans la dll.

Et quel est le problème de la description de leurs signatures ? Vous tirez Winapi à travers les signatures de méthodes d'une manière ou d'une autre, n'est-ce pas ?
 
Andrey Pogoreltsev:
Et quel est le problème de la description de leurs signatures ? Vous tirez Winapi à travers les signatures de méthodes d'une manière ou d'une autre, n'est-ce pas ?

Je suis désolé, pourquoi les décrire ? Et je suis désolé, je n'ai rien tiré))

 
Dmitry Fedoseev:

Je suis désolé, pourquoi les décrire ? Et je suis désolé, je n'ai rien tiré))

Désolé, j'ai déjà pensé que vous demandiez.
 
Andrey Pogoreltsev:
Chers utilisateurs du forum.

Pour travailler avec des threads multiples, vous devez d'abord apprendre la différence essentielle entre asynchronie, multithreading et exécution multiprocessus, car vous ne pouvez même pas comprendre votre logique à certains endroits. C'en est une.

Deuxièmement, l'appel à la DLL externe demeure et qui vous empêche d'implémenter votre propre bibliothèque avec plusieurs threads et de la brancher ?

Troisièmement, pour quelles tâches avez-vous besoin du multithreading sur mql ?

Sans parler du fait que vous devez encore apprendre les objets de synchronisation. En avez-vous besoin ? Si c'est le cas, il est très facile pour vous d'écrire une dll.

Andrey, je pense que tout le monde comprend que l'asynchronisme et le multithreading sont des choses différentes.
Comme la fonction CreateThread() est décrite dans l'inluder WinAPI, on supposait que les threads pouvaient être utilisés.
Il n'y a pas de fonctions similaires à CreateTask() décrites dans l'IDE, donc l'hypothèse d'une possible écriture de code asynchrone disparaît d'elle-même.
L'accent a donc été mis sur les fils. Cependant, il s'est avéré que les fonctions décrites ne sont que des prototypes WinAPI.
Je le répète, la tâche consistait à utiliser une pure WinAPI et le prototype décrit CreateThread() était trompeur. Il n'est dit nulle part qu'il s'agit de prototypes.
Toutes les tâches sont différentes, j'ai donc opté pour la méthode asynchrone et je pense qu'il est préférable de toujours écrire de manière asynchrone ou dans des threads,
Et prendre l'habitude de toujours écrire de manière asynchrone, vous permettra d'écrire des programmes rapides, et d'élever votre niveau de spécialiste.
C'est le principe de base des développeurs eux-mêmes, la vitesse d'exécution des programmes mql, c'est notre tout !

Il est dommage que mql ne dispose pas d'une telle fonctionnalité,
Je fais une suggestion à l'administration mql pour développer des fonctions mql standard pour la programmation asynchrone,
car il y a des problèmes de fils et, surtout, de sécurité.
Pour le mode asynchrone, je pense qu'il n'y a pas de problème de sécurité.

Exemple de logique

Élaborez l'implémentation d'EventLoop dans mql.
créer la classe MqlTask
Déclarer les tâches en tant qu'objet MqlTask obj ;
créer une tâche tâche = obj.CreateTask(MyFunc()) ;
exécuter le succès = tâche -> Exécuter() ;
pause exécution succès = tâche -> SleepMs(ms) ;
attendre le succès = tâche -> Attendre(ms) ;
attendre indéfiniment succès = tâche -> Attendre(0) ;
supprimer la tâche après avoir exécuté la tâche de suppression ;

et toutes sortes de getStatuses pour le contrôler.

 
Roman:

Andrey, je pense que tout le monde comprend que le mode asynchrone et le multithreading sont des choses différentes.
L'inluder de la WinAPI contient la fonction CreateThread() et nous avions supposé que les threads pouvaient être utilisés.
Puisqu'il n'y a pas de fonctions similaires à CreateTask() décrites dans l'IDE, nous ne devons pas envisager une éventuelle écriture de code asynchrone.
L'accent a donc été mis sur les fils. Cependant, il s'est avéré que les fonctions décrites ne sont que des prototypes WinAPI.
Je le répète, la tâche consistait à utiliser une pure WinAPI et le prototype décrit CreateThread() était trompeur. Il n'est dit nulle part qu'il s'agit de prototypes.
Toutes les tâches sont différentes, j'ai donc opté pour la méthode asynchrone et je pense qu'il est préférable de toujours écrire de manière asynchrone ou dans des threads,
Et une habitude développée de toujours écrire de manière asynchrone, vous permettra d'écrire des programmes rapides et d'élever votre niveau de spécialiste.
C'est le principe de base des développeurs eux-mêmes, la vitesse d'exécution des programmes mql, c'est notre tout !
Dommage qu'une telle fonction n'existe pas dans mql, je vais donc suggérer à l'équipe mql de développer une fonction mql standard.
pour la programmation asynchrone, car il y a des problèmes avec les threads et, surtout, la sécurité.
Je pense qu'il n'y a pas d'obstacles à la sécurité pour le mode asynchrone.
Élaborer l'implémentation des boucles, et exécuter des tâches dans ces boucles.

Décidez si vous voulez exécuter les méthodes de manière asynchrone ou multithread. Je travaille avec des sockets, par exemple, de manière asynchrone à partir de mql.

Le fait qu'il s'agisse de signatures a été immédiatement clair. De quelles implémentations internes parlons-nous sur un environnement d'exécution virtuel sécurisé ? Et comment envisagez-vous cela ?

Et encore. Ceux qui savent comment travailler avec des threads pourront facilement écrire une DLL pour ce système et y effectuer toutes les tâches.

Et oui, il existe des méthodes asynchrones dans mql, pour créer les mêmes ordres et travailler en réseau, si je ne me trompe pas. Quelles autres méthodes devez-vous rendre asynchrones ? Et quelle est la faisabilité de toutes ces mesures ?

Pouvez-vous me donner des cas où la vitesse d'un seul fil n'est pas suffisante ?
 
Andrey Pogoreltsev:
Décidez si vous voulez exécuter les méthodes de manière asynchrone ou multithread. Je travaille par exemple avec des sockets de manière asynchrone à partir de mql.

Le fait qu'il s'agisse de signatures a été immédiatement clair. De quelles implémentations internes parlons-nous sur un environnement d'exécution virtuel sécurisé ? Et comment envisagez-vous cela ?

Et encore. Ceux qui savent comment travailler avec des threads pourront facilement écrire une DLL pour ce système et y effectuer toutes les tâches.

Et oui, mql a des méthodes asynchrones pour créer les mêmes ordres et travailler avec le réseau, si je ne me trompe pas. Quelles autres méthodes devez-vous rendre asynchrones ? Et quel est l'aspect pratique de tout cela ?

Pouvez-vous nous donner quelques cas où la vitesse n'est pas suffisante pour travailler dans un seul fil ?

Afin de déterminer ce qu'il est possible d'utiliser dans mql et ce qui est interdit.
CreateThread() a été trouvé dans les inludes, donc j'ai pensé qu'il était possible de travailler avec des threads.
Mais il s'avère que les threads sont interdits, donc le choix se porte sur l'asynchrone, mais comment utiliser l'asynchrone dans mql n'est pas clair non plus.
Oui, c'est exactement le problème avec les sockets. L'aide indique que l'on ne peut créer plus de 128 sockets, ce qui limite l'obtention d'informations sur les actions américaines, par exemple.
Et même ces 128 sockets, on ne sait pas comment les convertir en mode asynchrone et éviter les retards dans le traitement des données entrantes.
C'est pourquoi j'ai dû chercher à résoudre le problème d'une autre manière,mais je voulais le résoudre en pure WinAPI, sans aucune dll auto-écrite.
Et comment travailler de manière asynchrone dans mql c'est intéressant, si vous avez des exemples de travail, il serait bon d'en discuter, si vous pouvez partager les informations.
Mais je n'ai pas vu les méthodes asynchrones standard de l'aide mql.

 
Roman:

Afin de déterminer ce qu'il est possible d'utiliser dans mql et ce qui est interdit.
J'ai trouvé CreateThread() dans les injecteurs du code, donc j'ai pensé que je pouvais gérer les threads.
Mais il s'est avéré que les threads sont interdits, donc le choix se porte sur l'asynchrone, mais comment utiliser l'asynchrone dans mql n'est pas clair non plus.
Oui, c'est exactement le problème avec les sockets. L'aide indique que l'on ne peut créer plus de 128 sockets, ce qui limite l'obtention d'informations sur les actions américaines, par exemple.
Et même ces 128 sockets, on ne sait pas comment les convertir en mode asynchrone et éviter les retards dans le traitement des données entrantes.
C'est pourquoi j'ai dû chercher la solution au problème d'une autre manière,mais je voulais le résoudre en pure WinAPI, sans aucune dll auto-écrite.
Et comment travailler de manière asynchrone dans mql c'est intéressant, si vous avez des exemples de travail, il serait bon d'en discuter, si vous pouvez partager les informations.
Mais je n'ai pas vu les méthodes asynchrones standard de l'aide mql.

Si vous voulez travailler de manière asynchrone avec des sockets via winapi, utilisez winsock2.

EssayezWSARecv et WSASend avec OVERLAPPED et WSAEVENT.

Alors attendez...
 

Je lis les participants intelligents et je me demande...

Quel est l'intérêt de tous ces gadgets ?

Quand, dans MQL, le multithreading serait-il si terriblement nécessaire ? Pour moi, la seule utilité serait le test de stratégie, qui est implémenté de manière standard.

Idéalement, il pourrait être judicieux d'exécuter plusieurs WebRequests, mais je ne pense pas que le multithreading soit nécessaire.

Quelles tâches nécessitent le multithreading en premier lieu ?