Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich werde übersetzen, was Ihnen bereits von einem Vertreter der MT-Entwicklungsgesellschaft mitgeteilt wurde:
Sie können keine Threads von MQL aus erstellen. Nicht einmal mit WinAPI.
Sie können dies nur tun, indem Sie Ihre eigene DLL schreiben.
WinAPI und verwendet Standard-DLL !
kernel32.dll
user32.dll
usw.
Multithreading ist mit WinAPI-Funktionen vorgesehen, nicht mit mql-Funktionen.
Aber es ist bedauerlich, dass man mit mql-Funktionen nicht in mehreren Threads arbeiten kann.
WinAPI und verwendet Standard-DLLs !
kernel32.dll
user32.dll
Hmm, genau das Gegenteil, WinAPI ist als dynamische Bibliotheken kernel32.dll , user32.dll... implementiert.
Sie haben noch nie versucht, in reinem C++ ein gewöhnliches Windows-Fenster mit dem Text "Hello Word!" zu schreiben. - Es gibt Beispiele im Netz, schreiben Sie Ihr erstes "Hello Word! - es wird sich von selbst aufklären ;)
hmm, genau das Gegenteil: WinAPI ist als dynamische Bibliotheken kernel32.dll , user32.dll... implementiert.
Sie haben noch nie versucht, in reinem C++ ein gewöhnliches Windows-Fenster mit dem Text "Hello Word!" zu schreiben. - Es gibt Beispiele im Netz, schreiben Sie Ihr erstes "Hello Word! - Vieles klärt sich dann von selbst ;)
Standard bedeutet Standard-Windows-DLLs, Standard bedeutet nicht, dass es sich um statische .lib
Igor, du gehst in die falsche Richtung...
Was hat "Hello Word!" mit der Initialisierung der Dll zu tun, und rufen Sie Funktionen davon in Ihrem Thread auf!
Zum Beispiel:
Es gibt die WinAPI-Funktion MessageBoxW();
Sie muss in ihrem eigenen Thread aufgerufen werden.
Dazu müssen Sie die DLL selbst und die exportierte Funktion initialisieren. Können Sie ein Beispiel geben, wie man das richtig macht?
Rufen Sie dann nach der Initialisierung MessageBoxW(); mit CreateThread() auf;
Nachdem die Funktion ausgeführt wurde, geben Sie die Ressource frei und schließen den Thread.
Geben Sie mir ein Beispiel dafür, wie man es in mql richtig macht?
Standard bedeutet die Standard-Windows-DLL, Standard bedeutet nicht, dass es sich um statische .lib
Igor, du gehst in die falsche Richtung...
Was hat "Hello Word!" mit der Initialisierung der dll zu tun, und rufen Sie Funktionen davon in Ihrem Thread auf!
Zum Beispiel:
Es gibt die WinAPI-Funktion MessageBoxW();
Sie muss in ihrem eigenen Thread aufgerufen werden.
Dazu müssen Sie die DLL selbst und die exportierte Funktion initialisieren. Können Sie ein Beispiel geben, wie man das richtig macht?
Rufen Sie dann nach der Initialisierung MessageBoxW(); mit CreateThread() auf;
Nach Ausführung der Funktion wird die Ressource freigegeben und der Thread geschlossen.
Geben Sie mir ein Beispiel dafür, wie man es in mql richtig macht?
Sie sind auf dem falschen Weg, wurde Ihnen gesagt - schreiben Sie eine DLL (in der Sie Speicher zuweisen und einen neuen Thread registrieren müssen! - dann alles beim Verlassen sorgfältig zerstören!) und es von MQL aus aufrufen
wo Speicherzuweisung und Prozessregistrierung in Ihrem Beispiel sind? Der MessageBox-Aufruf bedeutet, dass das MQL-Programm seine Ressourcen zugewiesen hat, aber keinen separaten Thread erstellt hat. Ich möchte es nicht einmal überprüfen, aber das Terminal sollte einfrieren, wenn MessageBox aufgerufen wird
Sie gehen den falschen Weg, sagte ich Ihnen - schreiben Sie eine DLL und rufen Sie es von MQL
wo in Ihrem Beispiel ist Speicherzuweisung und Prozessregistrierung? die Tatsache, dass Sie MessageBox aufgerufen haben - dies bedeutet nur, dass das MQL-Programm seine Ressourcen zur Verfügung gestellt hat, aber nicht einen separaten Thread erstellt hat. Ich will es nicht einmal überprüfen, aber wenn Sie MessageBox aufrufen, sollte Ihr Terminal einfrieren
Igor, ich habe die Funktionen der Initialisierungs-DLL als Beispiel angeführt, um zu verstehen, wovon ich spreche. Aber ich weiß nicht, wie man es in mql richtig macht, reines C++ kann irreführend sein.
Die Besonderheit von mql selbst kann Verwirrung stiften. Deshalb habe ich im Forum um Hilfe gebeten, nicht bei Google.
Warum muss ich eine dll schreiben, wenn WinAPI auf dll aufgebaut ist, und aufrufbare Funktionen sind bereits inuser32.dll, zum Beispiel
? Ich habe das Thema erstellt, um die Frage zu verstehen, wie es richtig in mql zu tun, und Sie sagen mir, wo Speicherzuweisung und Prozessregistrierung ist)).
Zeigen Sie mir ein gutes Beispiel, wie man das in mql macht?
Oder verweisen Sie mich auf einen guten Leitfaden.
Igor, ich gab die DLL-Initialisierungsfunktionen als Beispiel, um zu verstehen, was ich meine, aber ich weiß nicht, wie man es richtig in mql tun, reine C++ kann irreführend sein.
Die Besonderheit von mql selbst kann Verwirrung stiften. Deshalb habe ich im Forum um Hilfe gebeten, nicht bei Google.
Warum muss ich eine dll schreiben, wenn WinAPI auf dll aufgebaut ist, und aufrufbare Funktionen sind bereits in user32.dll, zum Beispiel
? Ich habe das Thema erstellt, um die Frage zu verstehen, wie es richtig in mql zu tun, und Sie sagen mir, wo Speicherzuweisung und Prozessregistrierung ist)).
Zeigen Sie mir ein gutes Beispiel, wie man das in mql macht?
Oder verweisen Sie mich auf einen guten Leitfaden.
Sie können keinen Thread aus dem mql-Programm erstellen, auch nicht mit WinAPI.
Igor, gab ich ein Beispiel für DLL-Initialisierungsfunktionen zu verstehen, was ich meine, aber wie man es richtig in mql tun, ich bin nicht bewusst, reine C++ kann irreführend sein.
Die Besonderheit von mql selbst kann Verwirrung stiften. Deshalb habe ich im Forum um Hilfe gebeten, nicht bei Google.
Warum muss ich eine dll schreiben, wenn WinAPI auf dll aufgebaut ist, und aufrufbare Funktionen sind bereits in user32.dll, zum Beispiel
? Ich habe das Thema erstellt, um die Frage zu verstehen, wie es richtig in mql zu tun, und Sie sagen mir, wo Speicherzuweisung und Prozessregistrierung ist)).
Zeigen Sie mir ein gutes Beispiel, wie man das in mql macht?
Oder verweisen Sie mich auf einen guten Leitfaden.
Noch einmal, dies geschieht nicht mit Hilfe von MMS, Sie lösen das Problem von der anderen Seite - von der Schwanzseite, nicht von der Kopfseite!
Sie schreiben eine DLL - rufen sie von MQL aus auf und übergeben Daten an die DLL, und wenn Sie das MQL-Programm fortsetzen müssen (komplexe Berechnungen), erstellen Sie einen neuen Thread in der DLL und verarbeiten die Daten in diesem Thread
Sie können lesen, wie man eine dll schreibt - suchen Sie im Forum nach "dll" und Sie werden etwa 20 Artikel finden
Es gibt keine Tutorials, aber die Ressource, die Sie verwenden, um eine DLL zu schreiben, so suchen Sie nach Lösungen, wie man Threads und so weiter zu erstellen.
Sie können keinen Fluss aus einem mql-Programm erstellen, auch nicht mit WinAPI.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Asynchrone und Multithreading-Programmierung in MQL
MetaQuotes Software Corp., 2019.07.24 16:31
Sie können MQL-Funktionen nicht von einer DLL aus aufrufen.
Es ist jedoch möglich, mehrere Threads über DLL-Aufrufe laufen zu lassen, so dass sie unabhängig von MQL5 in ihrer Umgebung arbeiten.
So bereiten Sie beispielsweise Daten aus MQL vor, legen sie irgendwo ab oder übergeben sie an eine DLL, die ihrerseits die Aufgabe in mehreren Threads ausführt und das Ergebnis über eine zusätzliche Funktion zurückgibt.
DerAufruf von Windows-API-Funktionen ist ein Aufruf von dll, das heißt, dass Threads für Windows-API-Funktionen mitCreateThread();
erstellt werden können.Nicht um sonst wurdeCreateThread(); in die Standard-Mql-Bibliothek portiert.
DerAufruf von Windows-API-Funktionen ist ein Aufruf von dll, so dass es für Windows-API-Funktionen möglich ist, Threads mitCreateThread()zu erstellen;
CreateThread(); wurde nicht ohne Grund in die Standard-Mql-Bibliothek portiert.
niemand hat irgendetwas portiert, was Sie in dem Paket sehen, sind nur Funktionssignaturen.
Um einen Fluss zu erstellen, benötigen Sie einen Funktionskörper - das ist der Körper, der im Fluss ausgeführt wird!
Um einen Thread in Windows zu registrieren, müssen Sie die Struktur ausfüllen:
siehelpStartAddress - dies ist die Adresse des Einstiegspunkts der Funktion, die in dem Thread ausgeführt wird, keine Sorge um dieSpeicherzuweisung
um dieses Problem zu lösen, müssen Sie eine Möglichkeit finden, die Adresse von MyFunc() zu erhalten - im Speicher, und es ist nicht vorhanden - nun, nirgendwo auf allen ... keine!
Ich weiß nicht, wie ich das Problem sonst erklären soll ... die es in Wirklichkeit nicht gibt ))))