Asynchrone und mehrfädige Programmierung in MQL - Seite 39

 
Andrey Barinov:
...

Was kann in einer Tabelle mit 1000 Zeilen durch Blättern mit dem Auge gefunden werden? Welches Problem wird gelöst?

P.S. Schon wieder Offtopic...

Andrew, die Aufgabe bestand darin, dem Benutzer die Möglichkeit zu geben, eine beliebige Tabelle zu erstellen. Wie in Sharp. Man weiß nie, was er vorhat...)).

Ich schlage vor, dass wir das Offtopic beenden)).


Fairerweise muss gesagt werden, dass nur der sichtbare Teil der Tabelle neu gezeichnet werden kann und der unsichtbare Teil nur bei einem Bildlaufereignis neu gezeichnet wird. Aber wie gesagt, das war ein Stresstest.


Es kommt darauf an, wie genau sich die Werte in der Tabelle verändern. Wenn sich die Werte sehr schnell und ständig ändern, ist es besser, nur den sichtbaren Bereich neu zu zeichnen und den unsichtbaren beim Scrollen neu zu zeichnen. Wenn sich die Werte nur selten ändern, ist es besser, alles auf einmal neu zu zeichnen, so dass beim Start des Bildlaufs keine Verzögerung durch das Neuzeichnen entsteht. Da man nie genau weiß, wie oft sich die Werte in der Tabelle ändern, habe ich mich für eine universelle Methode entschieden - alles auf einmal neu zu zeichnen. Es gibt nicht allzu viele Tabellen, in denen die Werte wie verrückt hin und her springen, daher ist es besser, sie alle auf einmal neu zu zeichnen. Es ist also besser, die gesamte Leinwand auf einmal neu zu zeichnen und die Verzögerung zu Beginn des Bildlaufs zu umgehen.

SZY: Haben Sie gesehen, wie lange es dauert, eine Leinwand mit 900*7000 Pixeln neu zu zeichnen? Selbst mit MT5 kann diese Verzögerung Hunderte von Millisekunden betragen. Es ist sehr unangenehm, eine solche Verzögerung zu erleben, wenn man mit dem Scrollen beginnt. Wenn die Häufigkeit des Neuzeichnens gering ist, ist es daher besser, alles auf einmal zu zeichnen.

Um zum Thema zurückzukommen - dies ist einer der Gründe für die Notwendigkeit von Multi-Threading in MT5)!


Eine letzte Sache. Um das Problem der Prozessorüberlastung zu vermeiden, wenn große Tabellen zu oft neu gezeichnet werden, habe ich einen anderen Weg gewählt. Ich habe einen speziellen Regler gebaut, um die Geschwindigkeit der Wertänderung einzustellen. Das heißt, die Werte ändern sich schnell, aber der Benutzer reguliert die Geschwindigkeit ihrer Ausgabe (Neuzeichnen) mit einem Schieberegler (ich habe es gezeigt). Dadurch wird der Prozessor zeitweise entlastet und der Benutzer kann die Informationen in der Tabelle bequemer wahrnehmen.

 
Реter Konow:

Andrei, die Aufgabe bestand darin, dem Benutzer die Möglichkeit zu geben, eine beliebige Tabelle zu erstellen. Genau wie in Sharp. Man weiß nie, was er sich in den Kopf setzt...))

Ich schlage vor, das Offtopic zu beenden)).


Um fair zu sein, können Sie nur den sichtbaren Teil der Tabelle neu zeichnen, den unsichtbaren Teil können Sie nur bei einem Bildlaufereignis neu zeichnen. Aber wie gesagt, es war ein Stresstest.


SZY: Es kommt darauf an, wie genau sich die Werte in der Tabelle ändern. Wenn sich die Werte sehr schnell und ständig ändern, ist es besser, nur den sichtbaren Bereich neu zu zeichnen und den unsichtbaren beim Scrollen neu zu zeichnen. Wenn sich die Werte nur selten ändern, ist es besser, alles auf einmal neu zu zeichnen, so dass beim Start des Bildlaufs keine Verzögerung durch das Neuzeichnen entsteht. Da man nie genau weiß, wie oft sich die Werte in der Tabelle ändern, habe ich mich für eine universelle Methode entschieden - alles auf einmal neu zu zeichnen. Es gibt nicht allzu viele Tabellen, in denen die Werte wie verrückt hin und her springen, daher ist es besser, sie alle auf einmal neu zu zeichnen. Es ist also besser, die gesamte Leinwand auf einmal neu zu zeichnen und die Verzögerung zu Beginn des Bildlaufs zu umgehen.

SZY: Haben Sie gesehen, wie lange es dauert, eine Leinwand mit 900*7000 Pixeln neu zu zeichnen? Selbst mit MT5 kann diese Verzögerung Hunderte von Millisekunden betragen. Es ist sehr unangenehm, eine solche Verzögerung zu erleben, wenn man mit dem Scrollen beginnt. Wenn die Häufigkeit des Neuzeichnens gering ist, ist es daher besser, alles auf einmal zu zeichnen.

Um auf das Thema zurückzukommen - dies ist einer der Gründe für die Notwendigkeit von Multithreading im MT5).


Eine letzte Sache. Um das Problem der Prozessorüberlastung zu vermeiden, wenn große Tabellen zu oft neu gezeichnet werden, habe ich einen anderen Weg gewählt. Ich habe einen speziellen Regler gebaut, um die Geschwindigkeit der Wertänderung einzustellen. Das heißt, die Werte ändern sich schnell, aber der Benutzer reguliert die Geschwindigkeit ihrer Ausgabe (Neuzeichnen) mit einem Schieberegler (ich habe es gezeigt). Dadurch wird der Prozessor zeitweise entlastet und der Benutzer kann die Informationen in der Tabelle bequemer wahrnehmen.

Peter, kennen Sie den Unterschied zwischen Asynchronität, Multithreading und Parallelität?

 
Sergey Chalyshev:

Peter, kennen Sie den Unterschied zwischen Asynchronität, Multithreading und Parallelität?

Ich schlage vor, Sie geben ein Beispiel für einen asynchronen oder parallelen Betrieb in einem einzigen Thread.
 
Реter Konow:
Ich schlage vor, im gleichen Thread ein Beispiel für einen asynchronen oder parallelen Betrieb zu geben.

OK, los geht's!

 
Sergey Chalyshev:

OK, los geht's!

Ich weiß von keinem.

Flow bietet nur eine Abfolge, und es ist schwierig, innerhalb einer engen Abfolge parallel zu sein. Man kann innerhalb einer Sequenz nur spekulativ asynchron sein, indem man auf seine früheren Umwege zurückblickt und neue Wendungen der alten Route bemerkt, wobei man stolz meint, einen neuen Weg zu gehen...

Verstehen Sie, dass die Grenzen des Single-Thread-Verfahrens nicht durch den Einfallsreichtum eines selbstbewussten Programmierers überwunden werden können, der glaubt, dass unzählige parallele Linien durch einen einzigen Punkt verlaufen können. Diese nicht-euklidische Geometrie passt nicht zu den Realitäten des Programms und fügt den Prozessen innerhalb des Threads keine Asynchronität hinzu.
 
Sergey Chalyshev:

OK, los geht's!

Einhändiges Klatschen? Zen nach außen ist nicht Zen :-)

Sie wissen ganz genau, dass Peter sich aus dem Sandkasten heraushält. Im Grunde kann er die Begriffe nicht verstehen.

Was bringt es, solche Fragen zu stellen? Nun, er wird anfangen zu plappern wie ein professioneller Reporter.

 
Maxim Kuznetsov:

eine Hand klatschen ? zen nach außen ist nicht zen :-)

Sie wissen ganz genau, dass Peter sich aus dem Sandkasten heraushält. Im Grunde kann er die Begriffe nicht verstehen.

Was bringt es, solche Fragen zu stellen? Nun, er wird anfangen zu plappern wie ein professioneller Reporter.

Warum sollte er das tun? Ich lache. Dann geben Sie mir ein Beispiel für eine asynchrone Single-Thread-Anwendung mit Parallelisierung. Wenn es etwas anderes ist als Selbstzerstörung, gebe ich zu, dass ich mich irre.
 
Leute, das ist elementare Logik. Nun, wie kann man etwas asynchron in einem Thread machen, der über eine einzelne Sequenz von Aktionen springt? Die einzige Möglichkeit besteht darin, sich im Kreis zu bewegen und bei jeder Iteration eine Entscheidung zu treffen, welche Operationen durchgeführt und welche verschoben werden sollen. Aber ist das eine normale Asynchronität? Wir sollten überhaupt nicht von Parallelität sprechen. Welche Art von Parallelität können wir in einem Thread haben? ))

Zwei Threads - zwei getrennte Handlungsabläufe, asynchron zueinander.
 
Реter Konow:
Nun, Leute, das ist elementare Logik. Nun, wie kann ein Thread etwas asynchron tun, indem er eine einzelne Sequenz von Operationen überspringt? Der einzige Weg ist, sich im Kreis zu bewegen und bei jeder Iteration eine Entscheidung zu treffen, welche Operationen durchgeführt und welche verschoben werden sollen. Aber ist das eine normale Asynchronität? Wir sollten überhaupt nicht von Parallelität sprechen. Welche Art von Parallelität können wir in einem Thread haben? ))

Zwei Threads sind zwei voneinander getrennte Handlungsabläufe, die asynchron zueinander ablaufen.

Zwei bzw. zweiundzwanzig Threads können entweder synchron oder asynchron sein. Ein einzelner Thread kann sowohl synchrone als auch asynchrone Operationen umfassen. Sie haben angegeben, wie. Parallel weiß nicht, wie man die parallelen einbeziehen kann.

 
Реter Konow:
Leute, das ist elementare Logik. Nun, wie kann man etwas asynchron in einem Thread machen, der über eine einzelne Sequenz von Aktionen springt? Die einzige Möglichkeit besteht darin, sich im Kreis zu bewegen und bei jeder Iteration eine Entscheidung zu treffen, welche Operationen durchgeführt und welche verschoben werden sollen. Aber ist das eine normale Asynchronität? Wir sollten überhaupt nicht von Parallelität sprechen. Welche Art von Parallelität können wir in einem Thread haben? ))

Bei den beiden Threads handelt es sich um zwei getrennte Handlungsabläufe, die asynchron zueinander ablaufen.

Ein asynchroner Aufruf erzeugt nicht unbedingt einen neuen Thread