Programação assíncrona e multi-tarefa em MQL - página 4

 
Prezados usuários do fórum.

Para trabalhar com vários fios, você deve primeiro aprender a diferença essencial entre assíncrono, multithreading e execução de multiprocessos, porque você não consegue nem mesmo entender sua lógica em alguns lugares. Antes de mais nada.

Em segundo lugar, a chamada para a DLL externa ainda permanece e quem o impede de implementar sua própria biblioteca com múltiplos fios e conectá-la?

Em terceiro lugar, para que tarefas você precisa de multithreading em mql?

Sem mencionar o fato de que você ainda tem que aprender os objetos de sincronização. Você precisa disso? Se assim for, é uma tarefa muito fácil escrever uma dll para você.
 
Roman:

Então inicializando emDLL_PROCESS_ATTACH: será suficiente ligar do programa mql?

Do programa mql para chamar suas funções localizadas na dll.

 
Dmitry Fedoseev:

A partir do programa mql para chamar suas funções localizadas na dll.

E qual é o problema em descrever suas assinaturas? Você está puxando winapi através de assinaturas de método de alguma forma, não está?
 
Andrey Pogoreltsev:
E qual é o problema em descrever suas assinaturas? Você não puxa o winapi de alguma forma através de assinaturas de método?

Desculpe-me, por que descrevê-los? E desculpe, eu não puxei nada))

 
Dmitry Fedoseev:

Desculpe-me, por que descrevê-los? E desculpe, eu não puxei nada))

Desculpe, eu já pensava que você estava perguntando.
 
Andrey Pogoreltsev:
Prezados usuários do fórum.

Para trabalhar com vários fios, você deve primeiro aprender a diferença essencial entre assíncrono, multithreading e execução de multiprocessos, porque você não consegue nem mesmo entender sua lógica em alguns lugares. Esta é uma delas.

Em segundo lugar, a chamada para a DLL externa ainda permanece e quem está impedindo você de implementar sua própria biblioteca com múltiplos fios e conectá-la?

Em terceiro lugar, para que tarefas você precisa de multithreading no mql?

Sem mencionar o fato de que você ainda tem que aprender os objetos de sincronização. Você precisa disso? Se você fizer isso, é muito fácil para você escrever uma dll.

Andrey, acho que todos entendem que assíncronia e multithreading são coisas diferentes.
Como a função CreateThread() está descrita no WinAPI inluder, supunha-se que as roscas poderiam ser usadas.
Não há funções similares à CreateTask() descrita na IDE, portanto a suposição de possível escrita assíncrona de código desaparece por si só.
Portanto, a ênfase foi colocada nos fios. No entanto, como se viu, as funções descritas são apenas protótipos WinAPI.
Repito, a tarefa era usar WinAPI puro e o protótipo descrito CreateThread() era enganoso. Não se diz em nenhum lugar que estes são protótipos.
Todas as tarefas são diferentes, por isso cheguei ao método assíncrono e acredito que é melhor escrever sempre de forma assíncrona ou em linhas,
E desenvolveu o hábito de escrever sempre de forma assíncrona, permitirá escrever programas rápidos, e elevar seu nível como especialista.
É o princípio básico dos próprios desenvolvedores, a velocidade de execução dos programas mql, é o nosso tudo!

É uma pena que o mql não tenha tal característica,
Faço uma sugestão à administração mql para desenvolver funções mql padrão para programação assíncrona,
pois há problemas com os fios e, acima de tudo, com a segurança.
Para o modo assíncrono, acho que não há problemas de segurança.

Exemplo de lógica

Trabalhar a implementação do EventLoop em mql.
criar a classe MqlTask
Declarar as tarefas como obj. Objeto MqlTask;
create task = obj.CreateTask(MyFunc());
executar sucesso = tarefa -> Executar();
pausa execução sucesso = tarefa -> SleepMs(ms);
esperar pelo sucesso = tarefa -> espera(ms);
esperar indefinidamente sucesso = tarefa -> Esperar(0);
remover a tarefa após a execução da tarefa de exclusão;

e todos os tipos de conseguir que aStatus o controle.

 
Roman:

Andrey, acho que todos entendem que modo assíncrono e multithreading são coisas diferentes.
O inluder do WinAPI contém a função CreateThread() e tínhamos assumido que os fios poderiam ser usados.
Como não há funções similares à CreateTask() descrita na IDE, não devemos considerar a possível escrita assíncrona de código.
Portanto, a ênfase foi colocada nos fios. No entanto, como se viu, as funções descritas são apenas protótipos WinAPI.
Repito, a tarefa era usar WinAPI puro e o protótipo descrito CreateThread() era enganoso. Não se diz em nenhum lugar que estes são protótipos.
Todas as tarefas são diferentes, por isso cheguei ao método assíncrono e acredito que é melhor escrever sempre de forma assíncrona ou em linhas,
E um hábito desenvolvido de escrever sempre de forma assíncrona, lhe permitirá escrever programas rápidos e elevar seu nível como especialista.
É o princípio básico dos próprios desenvolvedores, a velocidade de execução dos programas mql, é o nosso tudo!
Pena que não exista tal característica em mql, então farei uma sugestão à equipe de mql para desenvolver uma função padrão de mql
para programação assíncrona, pois há problemas com os fios e, acima de tudo, com a segurança.
Acho que não há obstáculos de segurança para o modo assíncrono.
Trabalhar a implementação de loops, e executar tarefas nesses loops.

Decida-se se deseja executar métodos de forma assíncrona ou multi-tarefa. Trabalho com tomadas, por exemplo, de forma assíncrona a partir de mql.

Que estas são assinaturas foi imediatamente claro, de que implementações internas estamos falando em um ambiente seguro de execução virtual? E como você vê isso?

E novamente. Aqueles que sabem trabalhar com threads escreverão facilmente uma DLL para isso e farão todas as tarefas lá.

E sim, existem métodos assíncronos em mql, para criar as mesmas ordens e trabalhar em rede, se não me engano. Que outros métodos você precisa para fazer assíncrono? E qual é a praticabilidade de todos eles?

Você pode me dar alguns casos em que a velocidade de um fio não é suficiente?
 
Andrey Pogoreltsev:
Decida-se se deseja executar métodos de forma assíncrona ou multi-tarefa. Eu, por exemplo, trabalho com soquetes de forma assíncrona a partir de mql.

Que estas são assinaturas foi imediatamente claro, de que implementações internas estamos falando em um ambiente seguro de execução virtual? E como você prevê isso?

E novamente. Aqueles que sabem trabalhar com threads escreverão facilmente uma DLL para isso e farão todas as tarefas lá.

E sim, a mql tem métodos assíncronos para criar as mesmas ordens e trabalhar em rede, se não me engano. Que outros métodos você precisa para fazer assíncrono? E qual é a praticidade de tudo isso?

Você pode nos dar alguns casos em que a velocidade não é suficiente para trabalhar em um só fio?

A fim de determinar o que é possível usar em mql e o que é proibido.
CreateThread() foi encontrado no inludes, então eu pensei que era possível trabalhar com fios.
Mas, como se tornou proibido o uso de fios, a escolha recai sobre a assimetria, mas como usar assimetria em mql também não é claro.
Sim, esse é exatamente o problema com as tomadas. A ajuda diz que não podem ser criados mais de 128 soquetes, o que limita a obtenção de informações sobre os estoques americanos, por exemplo.
E mesmo esses 128 soquetes não está claro como convertê-lo em modo assíncrono e evitar atrasos no processamento dos dados recebidos.
Por isso tive que buscar a solução do problema de outra forma,mas queria resolvê-lo em WinAPI puro, sem nenhuma dll autoescrita.
E como trabalhar de forma assíncrona em mql é interessante, se você tiver algum exemplo de trabalho, seria bom discuti-lo, se você puder compartilhar as informações.
Mas os métodos assíncronos padrão em mql ajudam que eu não tenha visto.

 
Roman:

A fim de determinar o que é possível usar em mql e o que é proibido.
Encontrei o CreateThread() nos injetores do código, então pensei que poderia lidar com os fios.
Mas, como se tornou proibido o uso de fios, a escolha recai sobre a assimetria, mas como usar assimetria em mql também não é claro.
Sim, esse é exatamente o problema com as tomadas. A ajuda diz que não podem ser criados mais de 128 soquetes, o que limita a obtenção de informações sobre os estoques americanos, por exemplo.
E mesmo esses 128 soquetes não está claro como convertê-lo em modo assíncrono e evitar atrasos no processamento dos dados recebidos.
Por isso tive que buscar a solução do problema de outra forma,mas queria resolvê-lo em WinAPI puro, sem nenhuma dll autoescrita.
E como trabalhar de forma assíncrona em mql é interessante, se você tiver algum exemplo de trabalho, seria bom discuti-lo, se você puder compartilhar as informações.
Mas os métodos assíncronos padrão em mql ajudam que eu não tenha visto.

Se você quiser trabalhar de forma assíncrona com soquetes via winapi, use winsock2.

ExperimenteWSARecv e WSASend com OVERLAPPED e WSAEVENT.

Então Aguarde...
 

Eu li os participantes inteligentes e me pergunto...

Qual é o objetivo de todos esses artifícios?

Quando na MQL a multi-tarefa seria tão terrivelmente necessária? Para mim, o único uso seria o teste de estratégia, que é implementado da maneira padrão.

Idealmente, pode fazer sentido executar vários WebRequests, mas não acho que seja necessário fazer multi-tarefas.

Que tarefas exigem multithreading em primeiro lugar?