Programmation asynchrone et multithread dans MQL - page 3

 
Vict:

Quelque chose que nous ne comprenons pas.

Mais ne vous embourbez pas - vous ne créerez pas un thread via CriAtTrade() à l'intérieur de µl, vous devez passer un pointeur à une fonction (où le thread commencera), mais comme indiqué ci-dessus - kukush.

Créez votre propre DLL qui crée le bon nombre de threads par elle-même.

Si vous souhaitez effectuer des calculs complexes, les appels purement WinAPI ne suffisent pas.

Oui, nous avons créé de nombreux prototypes d'appel WinAPI en interne, mais cela ne signifie pas qu'ils peuvent tous être appelés proprement depuis MQL.

 
Igor Makanu:

personne n'a porté quoi que ce soit, ce que vous voyez dans l'unité finale sont juste des signatures de fonction

pour créer un thread, vous avez besoin du corps de la fonction - c'est le corps qui sera exécuté dans le thread !

Pour enregistrer un fil dans Windows, vous devez remplir la structure :

voirlpStartAddress - il s'agit de l'adresse du point d'entrée de la fonction qui sera exécutée dans le thread, ne vous préoccupez pas de l'allocation de mémoire.

pour résoudre ce problème, vous devez trouver une occasion d'obtenir l'adresse de MyFunc() - en mémoire, et elle est absente - eh bien, nulle part du tout ... Aucun !


Je ne sais pas comment expliquer autrement le problème... qui n'est pas l'essence ))))

Voici une fonction portée dans un inluder, avec des paramètres, quelle est la différence ?

HANDLE  CreateThread(PVOID thread_attributes, 
                     ulong stack_size, 
                     PVOID start_address, 
                     PVOID parameter, 
                     uint creation_flags, 
                     uint &thread_id);

Et voici la fonction portée, en obtenant l'adresse de la fonction

PVOID  GetProcAddress(HANDLE module,
                      uchar &proc_name[]);
 

En fait, vous ne pouvez pas appeler CreateThread entièrement depuis MQL car les adresses physiques des fonctions ne sont pas disponibles.

Vous devez créer votre propre DLL qui fournira de véritables gestionnaires.

 
MetaQuotes Software Corp.:

En fait, vous ne pouvez pas appeler CreateThread entièrement depuis MQL car les adresses physiques des fonctions ne sont pas disponibles.

Vous devez créer votre propre DLL qui fournira de véritables gestionnaires.

C'est dommage. Ils ont portéCreateThread() ; etGetProcAddress() ;
Et
on ne peut pas obtenir les adresses physiques des fonctions, quel est le truc ? ))
La sécurité est une bonne chose mais, comme vous le voyez, elle restreint l'utilisation de l'interface standard WinAPI.
Pourquoi ces fonctions ont-elles été portées et incluses dans la bibliothèque standard mql ?
Tromper l'utilisateur, si vous ne pouvez pas les utiliser))
Et vous suggérez d'écrire votre propre dll asynchrone, dont je voulais me débarrasser, en utilisant l'interface WinAPI standard.
Mais je suppose que je vais devoir retourner à l'écriture de ma propre dll asynchrone.

p.s.
Voici les pièges de mql, pour ceux qui aiment envoyer tout le temps à google, il n'y a pas cette information par définition.

 
Roman:

C'est dommage. Ils ont porté dans leCreateThread() ; etGetProcAddress() ;
Et
vous ne pouvez pas obtenir les adresses physiques des fonctions, quel est le truc ? ))
La sécurité est une bonne chose mais, comme vous le voyez, elle restreint l'utilisation de l'interface standard WinAPI.
Pourquoi ces fonctions ont-elles été portées et incluses dans la bibliothèque standard mql ?
Tromper l'utilisateur, si vous ne pouvez pas les utiliser))
Et vous suggérez d'écrire votre propre dll asynchrone, dont je voulais me débarrasser, en utilisant l'interface WinAPI standard.
Mais je suppose que je vais devoir retourner à l'écriture de ma propre dll asynchrone.

p.s.
Voici les pièges de mql, pour ceux qui aiment envoyer tout le temps à google, il n'y a pas cette information par définition.

Ne confondez pas le prototypage de fonctions WinAPi et la fonctionnalité de portage.

Nous nous sommes efforcés de fournir des prototypes de fonctions WinAPI standard, afin que les développeurs n'aient pas à réinventer la roue. Ce n'est pas une bibliothèque, mais des descriptions.

Le fait d'avoir des descriptions brutes de WinAPI ne signifie pas que nous fournissons une garantie/possibilité d'appels non sécurisés.

Dans un langage d'application de ce niveau, la sécurité est primordiale.

 
Hmmm... Un autre problème se pose alors.
Comment donc depuis mql initialiser normalement la dll à charger et les fonctions à exporter ?

LoadLibraryW("MyDll.dll");
GetProccAddress(hMyDll, "MyFunc");
 
Roman:
Hmm... Un autre problème se pose alors.
Comment alors mql initialise normalement la dll chargeable, et les fonctions exportées ?

savez-vous lire ? savez-vous utiliser un moteur de recherche ? il y a plus de 20 articles sur l'écriture de DLL sur cette ressource, certains articles sont écrits de première main - par des admins (développeurs), lisez, faites, tout est en accès libre, - il n'y a pas plus d'instructions détaillées sur la façon d'écrire une DLL sans aucune connaissance des langages de programmation, mais seulement sur cette ressource ! - même avec des photos !

qu'essayez-vous d'accomplir ? - interdiction pour les inondations ?

Romain:

Mais je suppose que je vais devoir retourner à l'écriture de ma dll asynchrone.

qu'est-ce qui vous empêche d'écrire ? avez-vous besoin de sons de fanfare ? - quiconque est familier avec le C++ de base ou même plus simple en C# - pendant une journée est capable de trouver cette information, d'écrire et de vérifier dans le code, ici vous avez seulement besoin de "désir et assiduité" - ainsi un des admins a écrit, imho, il est impossible de choisir une expression plus précise



SZS : Je ne me souviens pas d'un cas où un administrateur aurait écrit autant de réponses à un utilisateur en une heure, quelque chose a changé, ou les étoiles se sont alignées ainsi ? )))))

 
Igor Makanu:

savez-vous lire ? savez-vous utiliser un moteur de recherche ? il y a plus de 20 articles sur l'écriture de DLL sur cette ressource, certains articles sont écrits de première main - par des admins (développeurs), lisez, faites, tout est en accès libre, - il n'y a pas plus d'instructions détaillées sur comment écrire une DLL sans connaître les langages de programmation du tout, mais seulement sur cette ressource ! - même avec des photos !

qu'essayez-vous d'accomplir ? - interdiction pour les inondations ?

SZS : Je ne me souviens pas d'un cas où un administrateur a écrit autant de réponses à un utilisateur en une heure, est-ce que quelque chose a changé ? )))))

Il n'y a aucune description dans ces articles sur l'initialisation de la dll et des fonctions ! !!
Montrez-moi où est décrite l'initialisation de la bibliothèque dll et desfonctions exportables, je vous en serais reconnaissant.
Il ne faut pas croire que les gens ne lisent pas les articles avant de se référer à un forum !

Igor Makanu:

qu'est-ce qui vous empêche d'écrire ? avez-vous besoin de fanfare ? - toute personne connaissant le c++ de base ou même le C# le plus simple peut chercher cette information sur Google, l'écrire et vérifier le code, tout ce dont vous avez besoin est "le désir et un cul laborieux" - c'est ce qu'a écrit l'un des administrateurs, l'expression ne pourrait pas être plus précise.

Rien n'empêche ! La tâche consistait à utiliser une pure WinAPI. Sans aucun dll auto-écrit !
Ce fil a été créé pour discuter du problème de la programmation multithread dans mql, vous avez une sorte d'attitude négative aujourd'hui, quel genre d'inondation dans le sujet créé par moi ?
Veuillez vous abstenir de tels commentaires.

 
Roman:
Hm... Un autre problème se pose alors.
Comment donc depuis mql initialiser normalement la dll à charger et les fonctions à exporter ?

Vous n'avez pas besoin de tirer ces fonctions dans mql. Créez des processus là dans la dll.

 
Dmitry Fedoseev:

Vous n'avez pas besoin de tirer ces fonctions dans mql. Créer des processus là dans la dll.

Votre dll, l'initialiser dansDLL_PROCESS_ATTACH : sera-t-il suffisant pour l'appeler depuis le programme mql ?
Je pensais qu'il était possible de travailler avec les fonctions WinAPI sans problèmes, et la dll fermée doit être initialisée en plus,
LoadLibraryW("MyDll.dll");

Raison: