Programmazione asincrona e multithread in MQL - pagina 4

 
Cari utenti del forum.

Per lavorare con thread multipli, dovete prima imparare la differenza essenziale tra asincronia, multithreading ed esecuzione multiprocesso, perché in alcuni punti non potete nemmeno capire la vostra logica. Prima di tutto.

In secondo luogo, la chiamata alla DLL esterna rimane comunque e chi vi impedisce di implementare la vostra libreria con più thread e collegarla?

In terzo luogo, per quali compiti avete bisogno del multithreading in mql?

Per non parlare del fatto che dovete ancora imparare gli oggetti di sincronizzazione. Ne hai bisogno? Se è così, è un compito molto facile scrivere un dll per voi.
 
Roman:

Quindi l'inizializzazione inDLL_PROCESS_ATTACH: sarà sufficiente per chiamare dal programma mql?

Dal programma mql per chiamare le sue funzioni situate in dll.

 
Dmitry Fedoseev:

Dal programma mql per chiamare le sue funzioni situate nella dll.

E qual è il problema nel descrivere le loro firme? State tirando winapi attraverso le firme dei metodi in qualche modo, vero?
 
Andrey Pogoreltsev:
E qual è il problema nel descrivere le loro firme? Non tirate winapi in qualche modo attraverso le firme dei metodi?

Scusa, perché descriverli? E mi dispiace, non ho tirato niente))

 
Dmitry Fedoseev:

Scusa, perché descriverli? E mi dispiace, non ho tirato niente))

Scusa, ho già pensato che me lo stessi chiedendo.
 
Andrey Pogoreltsev:
Cari utenti del forum.

Per lavorare con thread multipli, dovete prima imparare la differenza essenziale tra asincronia, multithreading ed esecuzione multiprocesso, perché in alcuni punti non potete nemmeno capire la vostra logica. Questo è uno.

In secondo luogo, la chiamata alla DLL esterna rimane ancora e chi ti impedisce di implementare la tua libreria con più thread e collegarla?

In terzo luogo, per quali compiti avete bisogno del multithreading su mql?

Per non parlare del fatto che dovete ancora imparare gli oggetti di sincronizzazione. Ne hai bisogno? Se lo fate, è molto facile per voi scrivere un dll.

Andrey, penso che tutti capiscano che l'asincronia e il multithreading sono cose diverse.
Poiché la funzione CreateThread() è descritta nell'inluder WinAPI, si supponeva che i thread potessero essere utilizzati.
Non ci sono funzioni simili a CreateTask() descritte nell'IDE, quindi l'ipotesi di una possibile scrittura asincrona del codice scompare da sola.
Pertanto, l'enfasi è stata posta sui fili. Tuttavia, come si è scoperto, le funzioni descritte sono solo prototipi WinAPI.
Ripeto, il compito era di usare WinAPI pure e il prototipo descritto CreateThread() era fuorviante. Non si dice da nessuna parte che si tratta di prototipi.
Tutti i compiti sono diversi, quindi sono arrivato al metodo asincrono e credo che sia meglio scrivere sempre in modo asincrono o in thread,
E sviluppato l'abitudine di scrivere sempre in modo asincrono, vi permetterà di scrivere programmi veloci, e aumentare il vostro livello come specialista.
È il principio di base degli sviluppatori stessi, la velocità di esecuzione dei programmi mql, è il nostro tutto!

È un peccato che mql non abbia una tale caratteristica,
Propongo all'amministrazione di mql di sviluppare funzioni standard di mql per la programmazione asincrona,
dato che ci sono problemi con i fili e, soprattutto, con la sicurezza.
Per la modalità asincrona penso che non ci siano problemi di sicurezza.

Esempio di logica

Elaborare l'implementazione di EventLoop in mql.
creare la classe MqlTask
Dichiarare i compiti come oggetto MqlTask obj;
creare compito compito = obj.CreateTask(MyFunc());
eseguire successo = compito -> Esegui();
pausa di esecuzione successo = compito -> SleepMs(ms);
aspettare il successo = task -> Wait(ms);
aspettare indefinitamente successo = task -> Wait(0);
rimuove il compito dopo aver eseguito il compito di cancellazione;

e tutti i tipi di getStatus per controllarlo.

 
Roman:

Andrey, penso che tutti capiscano che la modalità asincrona e il multithreading sono cose diverse.
L'inluder di WinAPI contiene la funzione CreateThread() e avevamo supposto che i thread potessero essere usati.
Poiché non ci sono funzioni simili a CreateTask() descritte nell'IDE, non dovremmo considerare la possibile scrittura di codice asincrono.
Pertanto, l'enfasi è stata posta sui fili. Tuttavia, come si è scoperto, le funzioni descritte sono solo prototipi WinAPI.
Ripeto, il compito era di usare WinAPI pure e il prototipo descritto CreateThread() era fuorviante. Non si dice da nessuna parte che si tratta di prototipi.
Tutti i compiti sono diversi, quindi sono arrivato al metodo asincrono e credo che sia meglio scrivere sempre in modo asincrono o in thread,
E un'abitudine sviluppata a scrivere sempre in modo asincrono, vi permetterà di scrivere programmi veloci e di aumentare il vostro livello come specialisti.
È il principio di base degli sviluppatori stessi, la velocità di esecuzione dei programmi mql, è il nostro tutto!
Peccato che non ci sia una tale funzione in mql, quindi farò un suggerimento al team mql per sviluppare una funzione standard di mql
per la programmazione asincrona, poiché ci sono problemi con i thread e, soprattutto, la sicurezza.
Penso che non ci siano ostacoli alla sicurezza per la modalità asincrona.
Elaborare l'implementazione dei loop, ed eseguire i compiti in questi loop.

Decidete se volete eseguire i metodi in modo asincrono o multithread. Lavoro con i socket, per esempio, in modo asincrono da mql.

Che si tratti di firme è stato subito chiaro, di quali implementazioni interne stiamo parlando su un ambiente di esecuzione virtuale sicuro? E come si immagina questo?

E ancora. Quelli che sanno come lavorare con i thread scriveranno facilmente una DLL per questo e faranno tutti i compiti lì.

E sì, ci sono metodi asincroni in mql, per creare gli stessi ordini e lavorare con la rete, se non mi sbaglio. Quali altri metodi dovete rendere asincroni? E qual è la praticabilità di tutti loro?

Potete darmi alcuni casi in cui la velocità di un solo filo non è sufficiente?
 
Andrey Pogoreltsev:
Decidete se volete eseguire i metodi in modo asincrono o multithread. Io, per esempio, lavoro con i socket in modo asincrono da mql.

Che si tratti di firme è stato subito chiaro, di quali implementazioni interne stiamo parlando su un ambiente di esecuzione virtuale sicuro? E come lo immagina?

E ancora. Quelli che sanno come lavorare con i thread scriveranno facilmente una DLL per questo e faranno tutti i compiti lì.

E sì, mql ha metodi asincroni per creare gli stessi ordini e lavorare con la rete, se non mi sbaglio. Quali altri metodi dovete rendere asincroni? E qual è la praticità di tutto questo?

Puoi darci alcuni casi in cui la velocità non è sufficiente per lavorare in un solo thread?

Per determinare cosa è possibile utilizzare in mql e cosa è vietato.
CreateThread() è stato trovato negli inlude, quindi ho pensato che fosse possibile lavorare con i thread.
Ma come si è scoperto i thread sono vietati, quindi la scelta cade su async, ma come usare async in mql non è chiaro.
Sì, questo è esattamente il problema delle prese. L'aiuto dice che non si possono creare più di 128 prese, il che limita l'ottenimento di informazioni sulle azioni americane, per esempio.
E anche quei 128 socket non è chiaro come convertirlo in modalità asincrona ed evitare ritardi nell'elaborazione dei dati in arrivo.
Ecco perché ho dovuto cercare la soluzione al problema in un altro modo,ma volevo risolverlo in pura WinAPI, senza nessuna dll auto-scritta.
E come lavorare in modo asincrono in mql è interessante, se hai qualche esempio di lavoro, sarebbe bene discuterne, se puoi condividere le informazioni.
Ma i metodi asincroni standard nell'aiuto di mql non li ho visti.

 
Roman:

Per determinare cosa è possibile utilizzare in mql e cosa è vietato.
Ho trovato CreateThread() negli iniettori del codice, quindi ho pensato di poter gestire i thread.
Ma come si è scoperto i thread sono vietati, quindi la scelta cade su async, ma come usare async in mql non è chiaro.
Sì, questo è esattamente il problema delle prese. L'aiuto dice che non si possono creare più di 128 prese, il che limita l'ottenimento di informazioni sulle azioni americane, per esempio.
E anche quei 128 socket non è chiaro come convertirlo in modalità asincrona ed evitare ritardi nell'elaborazione dei dati in arrivo.
Ecco perché ho dovuto cercare la soluzione al problema in un altro modo,ma volevo risolverlo in pura WinAPI, senza nessuna dll auto-scritta.
E come lavorare in modo asincrono in mql è interessante, se hai qualche esempio di lavoro, sarebbe bene discuterne, se puoi condividere le informazioni.
Ma i metodi asincroni standard nell'aiuto di mql non li ho visti.

Se volete lavorare in modo asincrono con i socket tramite winapi, usate winsock2.

ProvaWSARecv e WSASend con OVERLAPPED e WSAEVENT.

Allora aspetta...
 

Ho letto i partecipanti intelligenti e mi chiedo...

Che senso hanno tutti questi espedienti?

Quando in MQL il multi-threading sarebbe così terribilmente necessario? Per me, l'unico uso sarebbe il test delle strategie, che è implementato nel modo standard.

Idealmente, potrebbe avere senso eseguire diverse WebRequest, ma non credo che il multi-threading sia affatto necessario.

Quali compiti richiedono il multithreading in primo luogo?