Programmation asynchrone et multithread dans MQL - page 40

 
Алексей Тарабанов:

Deux ou vingt-deux threads peuvent être synchrones ou asynchrones. Un thread peut comprendre à la fois des opérations synchrones et asynchrones. Vous avez indiqué comment. Parallel ne sait pas comment inclure les parallèles.

Eh bien, oui. Vous ne pouvez pas inclure des calculs parallèles dans un seul fil. Les opérations synchrones et asynchrones peuvent être effectuées dans un ou plusieurs threads. Seulement, l'asynchronie monofilaire est essentiellement une séquence optimisée d'opérations dont la stabilité est inférieure à celle de l'asynchronie multi-filière. En cas de défaillance d'un thread, le système continue de fonctionner et les opérations du processus arrêté peuvent être dissociées dans d'autres threads, ce qui préserve l'aptitude au service. S'il n'y a qu'un seul fil, le système est kaput).

Une division aléatoire par zéro dans un fil et c'est tout.
 

Exemple : une fonction synchrone s'exécute dans le thread 1 et attend des données des threads 2, 3 et 4, tandis que les fonctions distribuées dans les threads 5, 6, 7 et 8 attendent des résultats.

Tous se lèvent et attendent le résultat. Maintenant, faites attention : que se passe-t-il si la fonction synchrone attend des données de son thread ? Et, à Dieu ne plaise, ces données dépendent de son résultat ?

 
Реter Konow:

Une division aléatoire par zéro dans un fil et c'est tout.

Non, ce n'est pas tout.

 
Алексей Тарабанов:

Exemple : une fonction synchrone s'exécute dans le thread 1 et attend des données des threads 2, 3 et 4, tandis que les fonctions distribuées dans les threads 5, 6, 7 et 8 attendent des résultats.

Tous se lèvent et attendent le résultat. Maintenant, faites attention : que se passe-t-il si la fonction synchrone attend des données de son thread ? Et à Dieu ne plaise, ces données dépendent de son résultat ?

Ok, je vais répondre moi-même :

Le canevas se met à clignoter.

 
Koldun Zloy:

Je vais traduire ce qui vous a déjà été dit par un représentant de la société de développement MT :

Vous ne pouvez pas créer de fils à partir de MQL. Pas même avec WinAPI.

Vous ne pouvez le faire qu'en écrivant votre propre DLL.


Vous pouvez, MQL5\Include\WinAPI\processthreadsapi.mqh a un wrapper
HANDLE CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id) ;

Mais que faire des pistes à travers MQL ? C'est pourquoi ils ont écrit que nous devons créer une DLL et travailler avec eux à cet endroit.


 

Alexei Tarabanov:

Exemple : une fonction synchrone s'exécute dans le thread 1 et attend des données des threads 2, 3 et 4, tandis que les fonctions distribuées dans les threads 5, 6, 7 et 8 attendent des résultats.

Tous se lèvent et attendent le résultat. Maintenant, faites attention : que se passe-t-il si la fonction synchrone attend des données de son thread ? Et à Dieu ne plaise, ces données dépendent de son résultat ?

Alexei Tarabanov:

Ok, je vais répondre moi-même :

Le canevas se met à clignoter.

Le surlignage n'a pas de sens.

Pour les autres pistes, jusqu'à ce que les données soient prêtes, on attendra. Rien ne clignotera.