Programmation asynchrone et multithread dans MQL - page 35

 
Andrei Novichkov:

Pourquoi ne pas lire la documentation sur le drapeau ? Sur https://en.cppreference.com . Et des exemples avec discussion sur stackoverflow.com. J'ai l'habitude d'utiliser ces sources d'information, et je vous conseille d'en faire autant.

Pourquoi, alors, voulez-vous participer à la conversation si vous n'êtes pas responsable de vos paroles ? C'est votre opinion qui m'intéressait, pas celle des petits malins du manuel. Dégagez de mon chemin. Je peux lire les quais sans vos instructions. Et je n'ai pas besoin de tout ce zoo de future/promise/async pour appeler une fonction dans un seul thread.

 
Vict:

Alors pourquoi venir dans une conversation si vous ne répondez pas de ce que vous dites ? C'est votre opinion qui m'intéressait, pas celle des petits malins du manuel. Dégagez de mon chemin. Je peux lire les quais sans vos instructions. Et je n'ai pas besoin de tout ce zoo de future/promise/async pour appeler une fonction dans un seul thread.

Tu n'as aucun sens. Vous ne savez pas, je vous ai dit où trouver des informations. Et c'était ma faute. Soyez plus souvent un ami des livres.
 
Andrei Novichkov:
Tu n'as aucun sens. Vous ne savez pas, je vous ai dit où trouver des informations. Et c'était ma faute. Soyez plus souvent un ami des livres.

Apparemment, vous ne le savez pas non plus. Pourquoi écrire sur rien ? Peut-être que je ne sais pas, où est le problème ? J'ai demandé un avis normal, il m'a envoyé quelque part.

Sur la liste noire, camarade.

 
Vict:

Apparemment, vous ne le savez pas non plus. Pourquoi écrire sur rien ? Peut-être que je ne sais pas, où est le problème ? J'ai demandé un avis normal, il m'a dit d'aller quelque part.

Sur la liste noire, camarade.

Je ne t'ai envoyé nulle part, je n'y ai même pas pensé. Je ne réponds pas bien à ce genre de questions avec mes propres mots, alors j'ai écrit sur la documentation. Encore une fois, qu'y a-t-il à s'offenser ? Mais comme tu veux, noir, donc noir.
 
Andrei Novichkov:
Je ne t'ai envoyé nulle part, je n'en rêverais même pas. Je n'ai pas l'habitude de répondre à ce genre de questions avec mes propres mots, alors j'ai écrit sur la documentation. Encore une fois, de quoi peut-on s'offenser ? Mais comme tu veux, noir, donc noir.

La documentation sur ce sujet est de peu d'utilité

std::launch::deferred la tâche est exécutée sur le thread appelant la première fois que son résultat est demandé (évaluation paresseuse)
Je ne comprends pas vraiment pourquoi j'ai besoin d'un tel miracle, je peux facilement passer un pointeur vers une fonction dans le thread dont j'ai besoin et la calculer là sans aucune async( std::launch::deferred).
 
Vict:

Je ne comprends pas vraiment pourquoi j'ai besoin d'un tel miracle, je peux facilement passer un pointeur vers une fonction dans un thread dont j'ai besoin et la calculer là sans aucune async( std::launch::deferred).

c'est peut-être hors sujet, mais :

j'ai remarqué que les exemples de Microsoft sont souvent écrits comme du code auto-documenté, donc ils écrivent des constructions encombrantes qui peuvent être étendues et remplacées par la valeur finale ( comme, vous voyez le code, et vous obtenez tout d'un seul coup )))) )

HH : Dans les exemples de C#, malheureusement, ce n'est pas comme ça, plusieurs fois j'ai écrit C# en croyant qu'il s'agissait essentiellement d'un analogue de C++ avec une certaine tendance àutiliser la POO, il s'avère que ce n'est pas comme ça, ce n'est pas du tout C++, vous ne pouvez souvent pas "accéder" aux champs d'une classe sans faire un casting vers une classe de base, c'est pourquoi je dois utiliser de longues constructions difficiles à manier, en général, l'analyse des bibliothèques prêtes à l'emploi pour C# est une véritable aventure !

 

Notez que par défaut, ces deux drapeaux sont appliqués ensemble différé | async, ce qui enlève la responsabilité du développeur. Nous parlons ici de la fonction du fil principal, oui, vous pouvez lui passer n'importe quoi, y compris un pointeur vers une fonction, ou un foncteur, comme argument. Et le drapeau différé peut même impliquer une exécution synchrone de la fonction. Vous voyez, je vous l'avais dit, je suis mauvais pour répondre à de telles questions avec mes propres mots). Tu t'embrouilles. Habituellement, vous laissez tout par défaut et ne vous préoccupez pas de ces drapeaux, peut-être que ce n'est pas correct.

 
Igor Makanu:

HH : Les exemples du C#, malheureusement, ne sont pas comme ça, plusieurs fois j'ai écrit en C# en croyant qu'il s'agissait, en fait, d'un analogue du C++ avec une certaine tendance à l'utilisation obligatoirede la POO, il s'est avéré que ce n'est pas comme ça, ce n'est pas du tout du C++, souvent vous ne pouvez pas "accéder" aux champs de la classe sans faire un casting vers la classe de base, donc vous devez utiliser de longues structures encombrantes, en général, l'analyse des bibliothèques prêtes à l'emploi pour le C# est une véritable aventure !

Eh bien, MS a une très bonne documentation sur les Spurs. Tout est expliqué en détail. Je ne peux pas me plaindre.
 
Vict:

La documentation sur ce sujet est de peu d'utilité.

Je ne comprends pas vraiment pourquoi j'ai besoin d'un tel miracle, je peux facilement passer un pointeur vers une fonction dans un thread dont j'ai besoin et la calculer là sans aucune async( std::launch::deferred).
Eh bien, par exemple, vous avez besoin d'une fonction pour calculer des valeurs avec les paramètres actuels sur la pile, mais pas maintenant et pas dans cette portée. Donc, vous créez std::asinc, mais, voici le problème, un des paramètres est une référence ou un pointeur vers une variable globale, mais dans le calcul vous n'aurez pas besoin de la valeur actuelle de cette variable, mais de celle qui sera plus tard, c'est pourquoi std::lounch::asinc et std::lounch: : bitmaskdifféré sont crééset vous pouvez passer la valeur à la fonction maintenant et effectuer le calcul plus tard.
 
Vladimir Simakov:
Par exemple, vous avez besoin d'une fonction pour calculer des valeurs avec les paramètres actuels sur la pile, mais pas maintenant et pas dans cette portée. Donc, vous créez std::asinc, mais voici le problème, un des paramètres est une référence ou un pointeur vers une variable globale, mais les calculs n'auront pas besoin de la valeur actuelle de cette variable, mais de celle qui sera plus tard, c'est pourquoi std::lounch::asinc et std::lounch: : deferred bitmasks sont créés et vous pouvez passer la valeur à la fonction maintenant et effectuer les calculs plus tard.

Je peux donc prendre une fonction que je passe à async, lui lier des arguments et la stocker jusqu'au moment de l'appeler (ou de l'envoyer à un autre thread). Quelle différence cela fait-il de stocker le futur ou la sortie de std::bind() ?

La seule explication raisonnable qui me vient à l'esprit est le contrôle manuel du nombre de threads en cours d'exécution dans le pool (si nous ne faisons pas confiance à l'async|deferred par défaut) - par exemple, si le système est trop occupé, arrêtez d'envoyer des tâches avec l'indicateur async, envoyez-les en différé.

En général, je suis un peu déçu par la lenteur d'async(), je vais créer mon propre pool de threads léger, il me semble que ce sera beaucoup plus rapide.