Asynchrone und mehrfädige Programmierung in MQL - Seite 4

 
Liebe Forumsnutzer.

Um mit mehreren Threads arbeiten zu können, müssen Sie zunächst den wesentlichen Unterschied zwischen Asynchronität, Multithreading und Multiprozessausführung kennen lernen, da Sie an manchen Stellen nicht einmal Ihre Logik verstehen können. Zuallererst.

Zweitens bleibt der Aufruf der externen DLL bestehen, und wer hindert Sie daran, Ihre eigene Bibliothek mit mehreren Threads zu implementieren und sie anzuschließen?

Drittens: Für welche Aufgaben benötigen Sie Multithreading in mql?

Ganz zu schweigen von der Tatsache, dass Sie die Synchronisationsobjekte noch lernen müssen. Brauchen Sie es? Wenn ja, ist es eine sehr einfache Aufgabe, eine DLL für Sie zu schreiben.
 
Roman:

So Initialisierung inDLL_PROCESS_ATTACH: wird genug sein, um von mql-Programm aufrufen?

Von mql-Programm, um seine Funktionen in dll zu rufen.

 
Dmitry Fedoseev:

Vom mql-Programm aus, um seine Funktionen in der dll aufzurufen.

Und was ist das Problem mit der Beschreibung ihrer Unterschriften? Sie ziehen winapi durch Methode Signaturen irgendwie, sind Sie nicht?
 
Andrey Pogoreltsev:
Und was ist das Problem mit der Beschreibung ihrer Unterschriften? Sie ziehen winapi durch Methode Signaturen irgendwie, sind Sie nicht?

Verzeihung, warum beschreiben Sie sie? Und es tut mir leid, ich habe nichts gezogen))

 
Dmitry Fedoseev:

Verzeihung, warum beschreiben Sie sie? Und es tut mir leid, ich habe nichts gezogen))

Entschuldigung, ich dachte schon, Sie fragen.
 
Andrey Pogoreltsev:
Liebe Forumsnutzer.

Um mit mehreren Threads arbeiten zu können, müssen Sie zunächst den wesentlichen Unterschied zwischen Asynchronität, Multithreading und Multiprozessausführung kennen lernen, da Sie an manchen Stellen nicht einmal Ihre Logik verstehen können. Das ist die eine.

Zweitens bleibt der Aufruf der externen DLL bestehen, und wer hindert Sie daran, Ihre eigene Bibliothek mit mehreren Threads zu implementieren und sie einzubinden?

Drittens, für welche Aufgaben benötigen Sie Multithreading auf mql?

Ganz zu schweigen von der Tatsache, dass Sie die Synchronisationsobjekte noch lernen müssen. Brauchen Sie es? Wenn Sie das tun, ist es für Sie sehr einfach, eine DLL zu schreiben.

Andrey, ich denke, jeder weiß, dass Asynchronität und Multithreading zwei verschiedene Dinge sind.
Da die Funktion CreateThread() im WinAPI-Inluder beschrieben ist, wurde angenommen, dass Threads verwendet werden können.
Es gibt keine Funktionen, die CreateTask() ähneln und in der IDE beschrieben sind, so dass sich die Annahme einer möglichen asynchronen Codeerstellung von selbst erledigt.
Daher wurde der Schwerpunkt auf Fäden gelegt. Wie sich jedoch herausstellte, handelt es sich bei den beschriebenen Funktionen nur um WinAPI-Prototypen.
Ich wiederhole, die Aufgabe war es, reine WinAPI zu verwenden und der beschriebene Prototyp CreateThread() war irreführend. Es wird nirgends gesagt, dass es sich um Prototypen handelt.
Alle Aufgaben sind unterschiedlich, daher habe ich mich für die asynchrone Methode entschieden, und ich glaube, dass es besser ist, immer asynchron oder in Threads zu schreiben,
Und die Gewohnheit zu entwickeln, immer asynchron zu schreiben, wird es Ihnen ermöglichen, schnelle Programme zu schreiben, und Ihr Niveau als Spezialist zu erhöhen.
Es ist das Grundprinzip der Entwickler selbst, die Geschwindigkeit der Ausführung von mql Programmen, ist unser alles!

Es ist schade, dass mql eine solche Funktion nicht hat,
Ich schlage der mql-Administration vor, mql-Standardfunktionen für asynchrone Programmierung zu entwickeln,
denn es gibt Probleme mit Threads und vor allem mit der Sicherheit.
Für den asynchronen Modus gibt es meiner Meinung nach keine Sicherheitsprobleme.

Beispiel Logik

Erarbeiten Sie die Implementierung von EventLoop in mql.
die Klasse MqlTask erstellen
Deklarieren Sie die Aufgaben als MqlTask-Objekt obj;
Aufgabe erstellen Aufgabe = obj.CreateTask(MyFunc());
Erfolg ausführen = Aufgabe -> Ausführen();
pause execution success = task -> SleepMs(ms);
Warten auf Erfolg = Aufgabe -> Warten(ms);
auf unbestimmte Zeit warten Erfolg = Aufgabe -> Warten(0);
die Aufgabe entfernen, nachdem sie die Aufgabe delete ausgeführt hat;

und alle Arten von getStatuses, um sie zu kontrollieren.

 
Roman:

Andrey, ich denke, jeder weiß, dass der asynchrone Modus und Multithreading unterschiedliche Dinge sind.
Das WinAPI-Inluder enthält die Funktion CreateThread(), und wir hatten angenommen, dass Threads verwendet werden können.
Da es in der IDE keine Funktionen gibt, die CreateTask() ähneln, sollten wir das mögliche asynchrone Schreiben von Code nicht berücksichtigen.
Daher wurde der Schwerpunkt auf Fäden gelegt. Wie sich jedoch herausstellte, handelt es sich bei den beschriebenen Funktionen nur um WinAPI-Prototypen.
Ich wiederhole, die Aufgabe war es, reine WinAPI zu verwenden und der beschriebene Prototyp CreateThread() war irreführend. Es wird nirgends gesagt, dass es sich um Prototypen handelt.
Alle Aufgaben sind unterschiedlich, daher bin ich zum asynchronen Modus übergegangen und glaube, dass es besser ist, immer asynchron oder in Threads zu schreiben,
Und die Angewohnheit, immer asynchron zu schreiben, wird es Ihnen ermöglichen, schnelle Programme zu schreiben und Ihr Niveau als Spezialist zu erhöhen.
Es ist das Grundprinzip der Entwickler selbst, die Geschwindigkeit der Ausführung von mql Programmen, ist unser alles!
Schade, dass es eine solche Funktion in mql nicht gibt, daher werde ich dem mql-Team vorschlagen, eine Standardfunktion für mql zu entwickeln
für asynchrone Programmierung, da es Probleme mit den Threads und vor allem mit der Sicherheit gibt.
Ich denke, dass es keine Sicherheitshindernisse für den asynchronen Modus gibt.
Ausarbeitung der Implementierung von Schleifen und Ausführung von Aufgaben in diesen Schleifen.

Entscheiden Sie sich, ob Sie Methoden asynchron oder multithreaded ausführen wollen. Ich arbeite mit Sockets, zum Beispiel asynchron von mql aus.

Dass es sich dabei um Signaturen handelt, war sofort klar. Von welchen internen Implementierungen in einer sicheren virtuellen Ausführungsumgebung ist die Rede? Und wie stellen Sie sich das vor?

Und wieder. Diejenigen, die wissen, wie man mit Threads arbeitet, können einfach eine DLL dafür schreiben und alle Aufgaben darin erledigen.

Und ja, es gibt asynchrone Methoden in mql, um die gleichen Aufträge zu erstellen und mit dem Netzwerk zu arbeiten, wenn ich mich nicht irre. Welche anderen Methoden brauchen Sie, um asynchron zu sein? Und wie sieht es mit der Praktikabilität aller aus?

Können Sie mir einige Fälle nennen, in denen die Geschwindigkeit eines einzelnen Fadens nicht ausreicht?
 
Andrey Pogoreltsev:
Entscheiden Sie sich, ob Sie Methoden asynchron oder multithreaded ausführen wollen. Ich zum Beispiel arbeite mit Sockets asynchron von mql aus.

Dass es sich dabei um Signaturen handelt, war sofort klar. Von welchen internen Implementierungen in einer sicheren virtuellen Ausführungsumgebung ist die Rede? Und wie stellen Sie sich das vor?

Und wieder. Diejenigen, die wissen, wie man mit Threads arbeitet, können einfach eine DLL dafür schreiben und alle Aufgaben darin erledigen.

Und ja, mql hat asynchrone Methoden, um die gleichen Aufträge zu erstellen und mit dem Netzwerk zu arbeiten, wenn ich mich nicht irre. Welche anderen Methoden brauchen Sie, um asynchron zu sein? Und wie sieht es in der Praxis aus?

Können Sie uns einige Fälle nennen, in denen die Geschwindigkeit nicht ausreicht, um in einem Thread zu arbeiten?

Um zu bestimmen, was in mql verwendet werden kann und was verboten ist.
CreateThread() wurde in den Inludes gefunden, also dachte ich, es sei möglich, mit Threads zu arbeiten.
Aber wie sich herausstellte, sind Threads verboten, also fällt die Wahl auf async, aber wie man async in mql verwendet, ist auch nicht klar.
Ja, genau das ist das Problem mit den Steckdosen. In der Hilfe heißt es, dass nicht mehr als 128 Sockets erstellt werden können, was den Zugriff auf Informationen, z. B. über amerikanische Aktien, einschränkt.
Und selbst bei diesen 128 Sockeln ist nicht klar, wie man sie in den asynchronen Modus umwandeln und Verzögerungen bei der Verarbeitung eingehender Daten vermeiden kann.
Deshalb musste ich nach einer anderen Lösung für das Problem suchen,aber ich wollte es mit einer reinen WinAPI lösen, ohne eine selbst geschriebene DLL.
Und wie man asynchron in mql arbeiten ist es interessant, wenn Sie irgendwelche Arbeitsbeispiele haben, wäre es gut, sie zu diskutieren, wenn Sie die Informationen teilen können.
Aber die Standard asynchronen Methoden in mql Hilfe habe ich nicht gesehen.

 
Roman:

Um zu bestimmen, was in mql verwendet werden kann und was verboten ist.
Ich fand CreateThread() in den Injektoren des Codes, also dachte ich, ich könnte mit Threads umgehen.
Aber wie sich herausstellte, sind Threads verboten, also fällt die Wahl auf async, aber wie man async in mql verwendet, ist auch nicht klar.
Ja, genau das ist das Problem mit den Steckdosen. In der Hilfe heißt es, dass nicht mehr als 128 Sockets erstellt werden können, was den Zugriff auf Informationen, z. B. über amerikanische Aktien, einschränkt.
Und selbst bei diesen 128 Sockeln ist nicht klar, wie man sie in den asynchronen Modus umwandeln und Verzögerungen bei der Verarbeitung eingehender Daten vermeiden kann.
Deshalb musste ich nach einer anderen Lösung für das Problem suchen,aber ich wollte es mit einer reinen WinAPI lösen, ohne eine selbst geschriebene DLL.
Und wie man asynchron in mql arbeiten ist es interessant, wenn Sie irgendwelche Arbeitsbeispiele haben, wäre es gut, sie zu diskutieren, wenn Sie die Informationen teilen können.
Aber die Standard asynchronen Methoden in mql Hilfe habe ich nicht gesehen.

Wenn Sie asynchron mit Sockets über winapi arbeiten wollen, verwenden Sie winsock2.

Versuchen SieWSARecv und WSASend mit OVERLAPPED und WSAEVENT.

Dann warten Sie auf...
 

Ich lese die klugen Teilnehmer und frage mich...

Was ist der Sinn dieser ganzen Spielereien?

Wann wird das Multithreading in MQL so dringend benötigt? Für mich wäre der einzige Nutzen das Testen von Strategien, das standardmäßig implementiert ist.

Im Idealfall könnte es sinnvoll sein, mehrere WebRequests auszuführen, aber ich glaube nicht, dass Multi-Threading überhaupt notwendig ist.

Welche Aufgaben erfordern überhaupt Multithreading?