Asynchrone und mehrfädige Programmierung in MQL - Seite 40

 
Алексей Тарабанов:

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

Nun, ja. Sie können keine parallelen Berechnungen in einem Thread durchführen. Synchrone und asynchrone Operationen können in einem oder mehreren Threads durchgeführt werden. Allerdings ist die Single-Thread-Asynchronie im Wesentlichen eine optimierte Abfolge von Operationen, die in Bezug auf die Stabilität der Multi-Thread-Asynchronie unterlegen ist. Wenn ein Thread ausfällt, läuft das System weiter, und die Operationen des angehaltenen Prozesses können auf andere Threads aufgeteilt werden, so dass die Betriebsfähigkeit erhalten bleibt. Wenn es nur einen Thread gibt, ist das System kaputt).

Zufällige Division durch Null in einem Thread und das war's.
 

Beispiel: In Thread 1 läuft eine synchrone Funktion, die auf Daten aus den Threads 2, 3 und 4 wartet, während in den Threads 5, 6, 7 und 8 verteilte Funktionen auf Ergebnisse warten.

Alle stehen und warten auf das Ergebnis. Und jetzt aufgepasst: Was ist, wenn die synchrone Funktion auf Daten von ihrem Thread wartet? Und, Gott bewahre, diese Daten hängen von ihrem Ergebnis ab?

 
Реter Konow:

Zufällige Division durch Null in einem Thread und das war's.

Nein, das ist noch nicht alles.

 
Алексей Тарабанов:

Beispiel: In Thread 1 läuft eine synchrone Funktion, die auf Daten aus den Threads 2, 3 und 4 wartet, während in den Threads 5, 6, 7 und 8 verteilte Funktionen auf Ergebnisse warten.

Alle stehen und warten auf das Ergebnis. Und jetzt aufgepasst: Was ist, wenn die synchrone Funktion auf Daten von ihrem Thread wartet? Und Gott bewahre, diese Daten hängen von ihrem Ergebnis ab?

Okay, ich werde sie selbst beantworten:

Die Leinwand beginnt zu blinken.

 
Koldun Zloy:

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.


Sie können, MQL5\Include\WinAPI\processthreadsapi.mqh hat einen Wrapper
HANDLE CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id);

Aber was soll man mit den Spuren durch MMS machen? Deshalb haben sie geschrieben, dass wir eine DLL erstellen und dort mit ihnen arbeiten müssen.


 

Alexej Tarabanow:

Beispiel: In Thread 1 läuft eine synchrone Funktion, die auf Daten aus den Threads 2, 3 und 4 wartet, während in den Threads 5, 6, 7 und 8 verteilte Funktionen auf Ergebnisse warten.

Alle stehen und warten auf das Ergebnis. Und jetzt aufgepasst: Was ist, wenn die synchrone Funktion auf Daten von ihrem Thread wartet? Und Gott bewahre, dass diese Daten von ihrem Ergebnis abhängen?

Alexej Tarabanow:

Okay, ich werde sie selbst beantworten:

Die Leinwand beginnt zu blinken.

Hervorgehoben hat keine Bedeutung.

Auf die anderen Spuren wird gewartet, bis die Daten fertig sind. Nichts wird blinken.