Programmazione asincrona e multithread in MQL - pagina 40

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

Due o ventidue thread possono essere sincroni o asincroni. Un thread può includere sia operazioni sincrone che asincrone. Lei ha indicato come. Parallelo non sa come includere quelli paralleli.

Beh, sì. Non si possono includere calcoli paralleli in un thread. Le operazioni sincrone e asincrone possono essere eseguite in uno o più thread. Solo che l'asincronia a thread singolo è essenzialmente una sequenza ottimizzata di operazioni che è inferiore in stabilità all'asincronia multi-thread. Se un thread fallisce, il sistema continuerà a funzionare e le operazioni del processo fermato possono essere dissociate in altri thread preservando il servizio. Se c'è solo un thread, il sistema è kaput).

Divisione casuale per zero in un thread e questo è tutto.
 

Esempio: c'è una funzione sincrona in esecuzione nel thread 1 e in attesa di dati dai thread 2, 3 e 4, mentre le funzioni distribuite nei thread 5, 6, 7 e 8 sono in attesa di risultati.

Tutti stanno in piedi e aspettano il risultato. Ora, fate attenzione: cosa succede se la funzione sincrona è in attesa di dati dal suo thread? E, Dio non voglia, questi dati dipendono dal suo risultato?

 
Реter Konow:

Divisione casuale per zero in un thread e questo è tutto.

No, non è tutto.

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

Esempio: c'è una funzione sincrona in esecuzione nel thread 1 e in attesa di dati dai thread 2, 3 e 4, mentre le funzioni distribuite nei thread 5, 6, 7 e 8 sono in attesa di risultati.

Tutti stanno in piedi e aspettano il risultato. Ora, fate attenzione: cosa succede se la funzione sincrona è in attesa di dati dal suo thread? E Dio non voglia che questi dati dipendano dal suo risultato?

Ok, mi rispondo da solo:

La tela inizierà a lampeggiare.

 
Koldun Zloy:

Traduco quello che vi è già stato detto da un rappresentante della società di sviluppo MT:

Non si possono creare thread da MQL. Nemmeno con WinAPI.

Potete farlo solo scrivendo la vostra DLL.


È possibile, MQL5\Include\WinAPI\processthreadsapi.mqh ha un wrapper
HANDLE CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id);

Ma cosa fare con le tracce attraverso MQL? Ecco perché hanno scritto che dobbiamo creare una DLL e lavorare con loro lì.


 

Alexei Tarabanov:

Esempio: c'è una funzione sincrona in esecuzione nel thread 1 e in attesa di dati dai thread 2, 3 e 4, mentre le funzioni distribuite nei thread 5, 6, 7 e 8 sono in attesa di risultati.

Tutti stanno in piedi e aspettano il risultato. Ora, fate attenzione: cosa succede se la funzione sincrona è in attesa di dati dal suo thread? E Dio non voglia che questi dati dipendano dal suo risultato?

Alexei Tarabanov:

Ok, mi rispondo da solo:

La tela inizierà a lampeggiare.

Evidenziato non ha senso.

Circa le altre tracce, fino a quando i dati non saranno pronti, aspetteranno. Niente lampeggia.

Motivazione: