Programmazione asincrona e multithread in MQL - pagina 14

 
Реter Konow:

È davvero così pericoloso? Errori nel rilascio della memoria...

L'esempio si riferisce ai principi generali di cattura del contesto del dispositivo e delle risorse allocate in Windows, quando si programmano thread indipendenti lo sviluppatore deve assicurarsi che il contesto del dispositivo e le risorse siano rilasciate quando richiesto dal sistema operativo, se lo sviluppatore utilizza comandi di basso livello deve rilasciare da solo tutte le risorse utilizzate... qui di nuovo al punto che ho scritto - scrivete una volta usando informazioni googled "Hello World"https://www.mql5.com/ru/forum/318593/page5#comment_12572558 e capirete molto, capirete che il 99% del lavoro per voi è stato fatto dai programmatori di sistema

Cioè lavorare in ambiente MQL - i programmatori di Metakvot l'hanno fatto per voi - hanno fatto in modo che il terminale funzioni nel caso in cui il programma MQL non funzioni correttamente

 
Andrey Pogoreltsev:

Multithreading - i compiti vengono eseguiti in più thread. Può essere eseguito su un singolo processore, sempre in multithreading e passando da uno all'altro quando le quote di tempo del processore si esauriscono. Richiede la sincronizzazione per l'accesso alle risorse condivise. Può portare a deadlock, condizioni di gara, bug di rilascio della memoria e altre "sorprese".

Asincrono - esecuzione di funzioni non bloccate (cioè il controllo viene restituito immediatamente dopo l'uscita del metodo), di solito su altri dispositivi (apparecchiature di rete, dispositivi di archiviazione, periferiche, ecc. Per esempio, è possibile scrivere un server multiutente ad alte prestazioni utilizzando solo un thread e connessioni client di elaborazione della macchina finale. Tutto dipende dallo scopo di questo server.

Nel tuo caso hai bisogno di creare un gran numero di connessioni usando WinAPI e puoi controllare lo stato di queste connessioni con WaitForMultipleObjects con un timeout, così non devi tenere un thread timer, per esempio.

PS. Teoricamente, si potrebbe anche usare IOCompletionPort, ma richiede più conoscenza e un'attenta progettazione.

Bene... vi siete trovati.

 
Forse la gente non ha abbastanza vitamine o micronutrienti...
 
Roman:

Grazie per la risposta informativa ))
Spiega cosa c'è e dove.
E come scrivere codice asincrono conEventloop con mezzi standard?

È tutto nella documentazione.

Si può iniziare leggendo e provando a scrivere qualcosa.

E se non puoi, puoi chiedere sul forum.

Finora non si parla di nulla.


 
Koldun Zloy:

È tutto nella documentazione.

Si può iniziare leggendo e provando a scrivere qualcosa.

E se non puoi, puoi chiedere sul forum.

Finora non si parla di nulla.


Per cosa pensi che il topic sia stato creato?
Voi ci dite come scrivere codice asincrono in modo regolare e lo mostrate nella documentazione.
Oltre all'invio di richieste asincrone, mostra dove le funzioni Callback, dove il controllo di EventLoop, dove Wait, ecc.
Sono sicuro che non sarai in grado di rispondere a questo perché non c'è una tale funzionalità per gli utenti, e non è nei documenti.
Esattamente la conversazione non riguarda nulla, l'unica persona qui nel thread èAndrey Pogoreltsev, che capisce il tema della comunicazione.

 
Euentloop! Qualcuno ha un Euentloop? Un uomo non sta bene qui senza un Euentloop! Qualcuno mi dia un Euentloop!
 

Romano, 2019.07.27 09:30

Per cosa pensi che il topic sia stato creato?


Avete chiesto del multithreading. Non ce n'è.

Ma non è di questo che si deve preoccupare in questo momento.

Romano, 2019.07.27 09:30

Ci dite come scrivere codice asincrono usando i mezzi standard e lo mostrate nella documentazione.
Oltre all'invio di richieste asincrone, mostraci dove le funzioni di Callback, dove il controllo di EventLoop, dove Wait, ecc.
Sono sicuro che non puoi dare una risposta a questo perché non c'è una tale funzionalità per gli utenti, e non è nei documenti.
Esattamente la conversazione non riguarda nulla, l'unica persona qui nel thread è Andrey Pogoreltsev, che capisce il tema della comunicazione.

Posso mostrarvi tutto. Ma qual è il punto?

Se ne avesse bisogno, lo troverebbe da solo.

Ovviamente non hai letto la documentazione o gli articoli.
 
Koldun Zloy:

Avete chiesto del multithreading. Non c'è multithreading.

Il multi-threading è comehttps://www.mql5.com/ru/docs/runtime/running , cioè vogliamo parallelizzare il compito, aprire diversi grafici (sfortunatamente non ho ancora provato a usare le caratteristiche dei servizi - forse sarà ancora più facile con loro? ) e collegare i nostri EA che lavorano in thread separati ad essi, quindi risolvere il problema della sincronizzazione e dello scambio di dati (compiti)

Ho chiesto a TS cinque volte - perché il terminale di trading ne ha bisogno... non lo sa, perché non c'è un compito o uno scopo specifico

Lo vedo in applicazioni client-server che non è tipico del terminale di trading, forse è conveniente per qualcuno inviare statistiche al server? - Bene, ho già scritto un esempio pronto (articolo)https://www.mql5.com/ru/articles/5337

Le fonti sono leggibili e l'articolo ha una qualità eccellente; le fonti possono essere modificate per eseguire calcoli paralleli in diversi threads.... ora cosa dobbiamo calcolare? )))

 
Igor Makanu:

L'esempio si riferisce ai principi generali di cattura del contesto del dispositivo e delle risorse allocate in Windows, quando si programmano thread indipendenti lo sviluppatore deve assicurarsi di rilasciare il contesto del dispositivo e le risorse quando richiesto dal sistema operativo, se lo sviluppatore utilizza comandi di basso livello deve rilasciare tutte le risorse utilizzate da solo... qui di nuovo al punto che ho scritto - scrivete una volta usando informazioni googled "Hello World" https://www.mql5.com/ru/forum/318593/page5#comment_12572558 e capirete molto, capirete che il 99% del lavoro per voi è stato fatto dai programmatori di sistema

In altre parole, lavorando in ambiente MQL i programmatori di Metakvot lo hanno fatto per voi - hanno assicurato il funzionamento stabile del terminale con un lavoro inadeguato dei programmi MQL

Ok, niente discussioni, convinto. Ottenere i fili giusti da soli può non essere fattibile per i codificatori autodidatti e può portare a errori critici. "I fiammiferi non sono giocattoli per bambini". Tuttavia, abbiamo bisogno di un modo per ottenere il multithreading all'interno di un singolo programma.

C'è una logica semplice: il lancio sequenziale dei servizi non causa errori, e ogni servizio gira nel suo thread. Quindi, il meccanismo è già configurato e debuggato. Bene. Dobbiamo fare un passo avanti: scrivere questi servizi nel codice dell'Expert Advisor in moduli speciali. Ogni modulo sarà lo stesso servizio. Poi, dovremmo compilare sequenzialmente questi moduli ed eseguirli simultaneamente. Questo è tutto.

In sostanza, non cambia nulla. Solo i servizi saranno scritti all'interno del codice civetta. Compilerebbero e funzionerebbero allo stesso modo. Saranno cancellati quando l'EA sarà rimosso dal grafico. In questo modo otteniamo un EA multi-threaded.

 
Puoi renderlo ancora più semplice. L'Expert Advisor carica da solo i servizi richiesti, che sono scritti separatamente. Quando viene rimosso dal grafico, li ferma. L'unica cosa da fare è aggiungere l'inizio dei servizi dall'Expert Advisor. E l'interazione interna tra i thread è un compito del programmatore. Si risolve con l'aiuto delle risorse.