Programmation asynchrone et multithread dans MQL - page 39

 
Andrey Barinov:
...

Que peut-on trouver à l'œil nu dans un tableau de 1000 lignes en le faisant défiler ? Quel est le problème résolu ?

P.S. Hors sujet à nouveau...

Andrew, la tâche consistait à permettre à l'utilisateur de créer n'importe quel tableau. Comme dans Sharp. On ne sait jamais ce qu'il peut avoir en tête...)).

Je suggère que nous mettions fin au hors-sujet)).


Pour être juste, vous ne pouvez redessiner que la partie visible du tableau, et seulement redessiner la partie invisible sur un événement de défilement. Mais encore une fois, c'était un test de stress.


Tout dépend de la manière dont les valeurs du tableau changent exactement. Si les valeurs changent très rapidement et constamment, il est préférable de ne redessiner que la zone visible, et de redessiner la zone invisible pendant le défilement. Si les valeurs changent peu fréquemment, il est préférable de les redessiner toutes en une seule fois, de sorte qu'au moment du début du défilement, il n'y ait pas de retard dû au redessin. Comme on ne sait jamais exactement à quelle fréquence les valeurs du tableau vont changer, j'ai choisi une méthode universelle : redessiner tout en une fois. On ne voit pas beaucoup de tableaux dont les valeurs sautent comme des fous, il est donc préférable de les redessiner en une seule fois. Il est donc préférable de redessiner l'ensemble du canevas en une seule fois et de contourner le délai au début du défilement.

SZY. Avez-vous vu combien de temps il faut pour redessiner une toile de 900*7000 pixels ? Même avec MT5, ce délai peut atteindre des centaines de millisecondes. Il est très désagréable d'obtenir un tel délai lorsque vous commencez à défiler. Par conséquent, si la fréquence de redécoupage est faible, il est préférable de dessiner tout en une fois.

Pour en revenir au sujet, c'est l'une des raisons pour lesquelles le multithreading est nécessaire dans MT5).


Une dernière chose. Afin d'éviter le problème de la surcharge du processeur lorsqu'on redessine trop souvent de grands tableaux, j'ai choisi une autre méthode. J'ai fait un régulateur spécial pour ajuster la vitesse de changement des valeurs. C'est-à-dire que les valeurs changent rapidement, mais l'utilisateur règle la vitesse de leur sortie (redécoupage) avec un curseur (je l'ai montré). Ainsi, la charge sur le processeur est parfois réduite et l'utilisateur a plus de facilité à percevoir les informations du tableau.

 
Реter Konow:

Andrei, la tâche consistait à permettre à l'utilisateur de créer n'importe quelle table. Comme dans Sharp. On ne sait jamais ce qu'il va se mettre dans la tête...))

Je suggère de terminer le hors-sujet)).


Pour être juste, vous ne pouvez redessiner que la partie visible du tableau, vous ne pouvez redessiner la partie invisible que sur un événement de défilement. Mais encore une fois, c'était un test de stress.


SZY. Tout dépend de la façon dont les valeurs du tableau changent exactement. Si les valeurs changent très rapidement et constamment, il est préférable de ne redessiner que la zone visible, et de redessiner la zone invisible pendant le défilement. Si les valeurs changent peu fréquemment, il est préférable de les redessiner toutes en une seule fois, de sorte qu'au moment du début du défilement, il n'y ait pas de retard dû au redessin. Comme on ne sait jamais exactement à quelle fréquence les valeurs du tableau vont changer, j'ai choisi une méthode universelle : redessiner tout en une fois. On ne voit pas beaucoup de tableaux dont les valeurs sautent comme des fous, il est donc préférable de les redessiner en une seule fois. Il est donc préférable de redessiner l'ensemble du canevas en une seule fois et de contourner le délai au début du défilement.

SZY. Avez-vous vu combien de temps il faut pour redessiner une toile de 900*7000 pixels ? Même avec MT5, ce délai peut atteindre des centaines de millisecondes. Il est très désagréable d'obtenir un tel délai lorsque vous commencez à défiler. Par conséquent, si la fréquence de redécoupage est faible, il est préférable de dessiner tout en une fois.

Pour en revenir au sujet, c'est l'une des raisons pour lesquelles le multithreading est nécessaire dans MT5).


Une dernière chose. Afin d'éviter le problème de la surcharge du processeur lorsqu'on redessine trop souvent de grands tableaux, j'ai choisi une autre méthode. J'ai fait un régulateur spécial pour ajuster la vitesse de changement des valeurs. C'est-à-dire que les valeurs changent rapidement, mais l'utilisateur règle la vitesse de leur sortie (redécoupage) avec un curseur (je l'ai montré). Ainsi, la charge sur le processeur est parfois réduite et l'utilisateur a plus de facilité à percevoir les informations du tableau.

Peter, comprenez-vous la différence entre asynchronie, multithreading et parallélisme ?

 
Sergey Chalyshev:

Peter, comprenez-vous la différence entre asynchronie, multithreading et parallélisme ?

Je vous suggère de donner un exemple de fonctionnement asynchrone ou parallèle dans un seul fil.
 
Реter Konow:
Je suggère de donner un exemple de fonctionnement asynchrone ou parallèle dans le même fil.

OK, c'est parti !

 
Sergey Chalyshev:

OK, vas-y !

Je n'en connais pas.

Le flux n'offre qu'une séquence, et il est difficile d'être parallèle dans une séquence étroite. On ne peut être asynchrone à l'intérieur d'une séquence que de manière spéculative, en regardant en arrière ses précédents passages détournés et en notant de nouveaux virages sur l'ancienne route, en pensant fièrement suivre un nouveau chemin...

Comprenez que les limites de la monotâche ne peuvent être surmontées par l'ingéniosité d'un codeur sûr de lui qui croit que d'innombrables lignes parallèles peuvent passer par un seul point. Cette géométrie non euclidienne ne correspond pas aux réalités du programme et n'ajoute pas d'asynchronie aux processus à l'intérieur du thread.
 
Sergey Chalyshev:

OK, c'est parti !

Claquement de mains à une main ? Le zen extérieur n'est pas zen :-)

Eh bien, vous savez pertinemment que Peter reste en dehors du bac à sable. En fait, il ne comprend pas les termes.

Quel est l'intérêt de poser des questions comme ça ? Il va commencer à blablater comme un journaliste professionnel.

 
Maxim Kuznetsov:

Claquer d'une main ? Le zen vers l'extérieur n'est pas zen :-)

Eh bien, vous savez pertinemment que Peter reste en dehors du bac à sable. En fait, il ne comprend pas les termes.

Quel est l'intérêt de poser des questions comme ça ? Il va commencer à blablater comme un journaliste professionnel.

Pourquoi aurait-il gaffé ? Je rigole. Alors, donnez-moi un exemple d'asynchronie monofilaire avec mise en parallèle. Si c'est autre chose que de l'auto-destruction, j'admettrai que j'ai tort.
 
Les gars, eh bien, la logique élémentaire. Comment rendre quelque chose d'asynchrone dans un seul fil, en sautant par-dessus une seule séquence d'actions ? La seule solution est de se déplacer en cercle et de décider à chaque itération des opérations à effectuer et de celles à reporter. Mais s'agit-il d'une asynchronie normale ? Nous ne devrions pas du tout parler de parallélisme. Quel type de parallélisme peut-on avoir dans un seul fil ? ))

Deux threads - deux séquences d'action distinctes, asynchrones l'une par rapport à l'autre.
 
Реter Konow:
Eh bien, les gars, c'est de la logique élémentaire. Comment un thread peut-il faire quelque chose d'asynchrone, en sautant par-dessus une seule séquence d'opérations ? La seule solution est de se déplacer en cercle et de décider à chaque itération des opérations à effectuer et de celles à reporter. Mais s'agit-il d'une asynchronie normale ? Nous ne devrions pas du tout parler de parallélisme. Quel type de parallélisme peut-on avoir dans un seul fil ? ))

Deux threads sont deux séquences d'actions séparées, asynchrones l'une par rapport à l'autre.

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

 
Реter Konow:
Les gars, eh bien, la logique élémentaire. Comment rendre quelque chose d'asynchrone dans un seul fil, en sautant par-dessus une seule séquence d'actions ? La seule solution est de se déplacer en cercle et de décider à chaque itération des opérations à effectuer et de celles à reporter. Mais s'agit-il d'une asynchronie normale ? Nous ne devrions pas du tout parler de parallélisme. Quel type de parallélisme peut-on avoir dans un seul fil ? ))

Les deux threads sont deux séquences d'action séparées, asynchrones l'une par rapport à l'autre.

Un appel asynchrone ne crée pas nécessairement un nouveau fil d'exécution.