Programmazione asincrona e multithread in MQL - pagina 3

 
Vict:

Qualcosa che non ci capiamo.

Ma non impantanatevi - non creerete un thread tramite CriAtTrade() dentro µl, dovete passare un puntatore a una funzione (dove il thread inizierà), ma come notato sopra - kukush.

Fate la vostra DLL che crea da sola il giusto numero di thread.

Se volete fare calcoli complessi, allora le chiamate WinAPI pure non sono sufficienti.

Sì, abbiamo fatto molti prototipi di chiamata WinAPI in-house, ma questo non significa che tutti possano essere chiamati in modo pulito da MQL.

 
Igor Makanu:

nessuno ha portato nulla, quello che vedete nell'endunit sono solo firme di funzioni

per creare un thread, avete bisogno del corpo della funzione - questo è il corpo che verrà eseguito nel thread!

Per registrare un thread in Windows è necessario compilare la struttura:

vedilpStartAddress - questo è l'indirizzo del punto di ingresso della funzione che verrà eseguita nel thread, non preoccupatevi dell'allocazione della memoria

per risolvere questo problema, è necessario trovare un'opportunità per ottenere l'indirizzo di MyFunc() - in memoria, ed è assente - beh, da nessuna parte ... nessuno!


Non so come altro spiegare il problema ... che non è l'essenza ))))

Ecco una funzione portata in un inluder, con parametri, qual è la differenza?

HANDLE  CreateThread(PVOID thread_attributes, 
                     ulong stack_size, 
                     PVOID start_address, 
                     PVOID parameter, 
                     uint creation_flags, 
                     uint &thread_id);

Ed ecco la funzione portata, ottenendo l'indirizzo della funzione

PVOID  GetProcAddress(HANDLE module,
                      uchar &proc_name[]);
 

In effetti, non si può chiamare CreateThread completamente da MQL perché gli indirizzi fisici delle funzioni non sono disponibili.

Dovete fare la vostra DLL che fornirà dei veri gestori.

 
MetaQuotes Software Corp.:

In effetti, non si può chiamare CreateThread completamente da MQL perché gli indirizzi fisici delle funzioni non sono disponibili.

Dovete fare la vostra DLL che fornirà i veri gestori.

Che peccato. Hanno portatoCreateThread(); eGetProcAddress();
E
non si possono ottenere gli indirizzi fisici delle funzioni, qual è il trucco? ))
La sicurezza è una buona cosa ma, come vedete, limita l'uso della WinAPI standard.
Perché queste funzioni sono state portate e incluse nella libreria standard mql?
Ingannare l'utente, se non puoi usarli))
E voi suggerite di scrivere la vostra dll asincrona, di cui volevo sbarazzarmi, usando la WinAPI standard
Ma credo che dovrò tornare a scrivere la mia DLL asincrona.

p.s.
Ecco le insidie di mql, per chi ama inviare tutto il tempo a Google, non c'è questa informazione per definizione.

 
Roman:

Che peccato. Hanno portato nelCreateThread(); eGetProcAddress();
E
non si possono ottenere gli indirizzi fisici delle funzioni, qual è il trucco? ))
La sicurezza è una buona cosa ma, come vedete, limita l'uso della WinAPI standard.
Perché queste funzioni sono state portate e incluse nella libreria standard mql?
Ingannare l'utente, se non puoi usarli))
E voi suggerite di scrivere la vostra dll asincrona, di cui volevo sbarazzarmi, usando la WinAPI standard
Ma credo che dovrò tornare a scrivere la mia DLL asincrona.

p.s.
Ecco le insidie di mql, per chi ama inviare tutto il tempo a google, non c'è questa informazione per definizione.

Non confondete la prototipazione di funzioni WinAPi e la funzionalità di porting.

Abbiamo volutamente fatto un grande lavoro nel fornire prototipi di funzioni WinAPI standard, in modo che gli sviluppatori non debbano reinventare la ruota. Questa non è una biblioteca, ma descrizioni.

Avere descrizioni WinAPI grezze non significa che forniamo una garanzia/opportunità per le chiamate insicure.

In un linguaggio applicativo di questo livello, la sicurezza è fondamentale.

 
Hmmm... Poi sorge un altro problema.
Come fare allora da mql per inizializzare normalmente la dll da caricare e le funzioni da esportare ?

LoadLibraryW("MyDll.dll");
GetProccAddress(hMyDll, "MyFunc");
 
Roman:
Hmm... Poi sorge un altro problema.
Come allora da mql inizializzare normalmente la dll caricabile, e le funzioni esportate?

puoi leggere? puoi usare il motore di ricerca? ci sono più di 20 articoli sulla scrittura di DLL su questa risorsa, alcuni articoli sono scritti in prima persona - da amministratori (sviluppatori), leggi, fai, tutto è in libero accesso, - non ci sono istruzioni più dettagliate su come scrivere una DLL senza alcuna conoscenza dei linguaggi di programmazione, ma solo su questa risorsa! - anche con le foto!

cosa stai cercando di ottenere? - divieto di allagamento?

Romano:

Ma credo che dovrò tornare a scrivere il mio dll asincrono.

cosa ti impedisce di scrivere? hai bisogno di suoni di fanfara? - Chiunque abbia familiarità con C++ di base o anche più semplice in C# - durante una giornata è in grado di trovare queste informazioni, scrivere e controllare nel codice, qui c'è solo bisogno di "desiderio e assiduità" - così ha scritto uno degli amministratori, imho, è impossibile scegliere un'espressione più precisa



SZS: Non ricordo un caso in cui un amministratore avrebbe scritto così tante risposte a un utente in un'ora, qualcosa è cambiato, o le stelle si sono allineate così? )))))

 
Igor Makanu:

sai leggere? sai usare il motore di ricerca? ci sono più di 20 articoli sulla scrittura di DLL su questa risorsa, alcuni articoli sono scritti in prima persona - da amministratori (sviluppatori), leggi, fai, tutto è in libero accesso, - non ci sono istruzioni più dettagliate su come scrivere una DLL senza conoscere linguaggi di programmazione a tutti, ma solo su questa risorsa! - anche con le foto!

cosa stai cercando di ottenere? - divieto di allagamento?

SZS: non ricordo un caso in cui un amministratore ha scritto così tante risposte a un utente in un'ora, è cambiato qualcosa? )))))

Non c'è nessuna descrizione in questi articoli sull'inizializzazione della dll e delle funzioni!!!
Mostratemi dove è descritta l'inizializzazione della libreria dll e dellefunzioni esportabili, ve ne sarei grato.
Non c'è bisogno di pensare che la gente non legga gli articoli prima di riferirsi a un forum!

Igor Makanu:

cosa ti impedisce di scrivere? hai bisogno di fanfare? - Chiunque conosca il c++ di base o anche il più semplice C# può cercare su Google queste informazioni, scriverle e verificarle nel codice, tutto ciò che serve è "desiderio e un culo da paura" - così ha scritto uno degli amministratori, imho, l'espressione non potrebbe essere più precisa

Niente impedisce! Il compito era quello di usare WinAPI puro. Senza alcun dll autoscritto!
Questo thread è stato creato per discutere il problema della programmazione multithreaded in mql, hai una sorta di atteggiamento negativo oggi, che tipo di inondazione nel topic creato da me?
La prego di astenersi da tali commenti.

 
Roman:
Hm... Poi viene fuori un altro problema.
Come fare allora da mql per inizializzare normalmente la dll da caricare e le funzioni da esportare?

Non c'è bisogno di tirare queste funzioni in mql. Creare processi lì nella dll.

 
Dmitry Fedoseev:

Non c'è bisogno di tirare queste funzioni in mql. Creare processi lì in dll.

La tua dll, inizializzala inDLL_PROCESS_ATTACH: sarà sufficiente chiamare dal programma mql?
Pensavo fosse possibile lavorare con le funzioni WinAPI senza problemi, e la dll chiusa deve essere inizializzata ulteriormente,
LoadLibraryW("MyDll.dll");