Fluxo de eventos. Como controlar e tornar o evento inactivo ? (+ resolvido) - página 5

 
Yedelkin:

OK, estou a ver.TheXpert fez uma onda e o problema começou.

É um verdadeiro aborrecimento para si. É culpa minha que não consiga comunicar com as pessoas?

O Expert Advisor tem um consumo fixo de memória, se

(1) sem emulação tampão

(2) nenhum desenho de objectos sobre a história.

(3) sem bugs de alocação de memória. Mas isto é normalmente visto com o deinit.

(4) não há insectos a trabalhar com os índices. Se um indicador tiver um tampão de tamanho completo, é um bug.

Se houver (1) ou (2) queima é fácil de rastrear com tester + despachante. É tratado por controlo de tamanho.

Os eventos por si só não comem memória de todo (em ordem ascendente). Portanto, se não houver problema no Consultor Especialista, o problema está definitivamente no indicador.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
TheXpert:

Num EA, o consumo de memória é fixo se

(1) não há emulação tampão

(2) não há desenho de objectos sobre a história.

(3) sem bugs de alocação de memória. Mas isto é normalmente visto com a desiniteração.

(4) sem bugs de trabalhar com índices. Se um indicador tiver um tampão de tamanho completo, é um bug.

Se tiver (1) ou (2), é fácil rastrear a sobrecarga com o provador e o despachante. Pode ser tratado com controlo de tamanho.

Os eventos em si não consomem de todo a memória (ascendente). Portanto, se o Consultor Especialista não tiver qualquer problema, o problema está definitivamente no Isolador.

Muito obrigado por uma resposta tão detalhada. Vou pensar bem. (1) - (3) não é definitivamente.

Sobre (4) explicar: o que significa "se o indicador leva o tampão ao tamanho total", para não se perder em conjecturas.

Sobre "Se houver (1) ou (2) queima é fácil de rastrear pelo testador + gestor" peço para especificar: isto é, sugere que se utilize o testador não só para medir a velocidade do programa, mas também para medir o volume consumido? Sim; uma solução tão simples, nunca me ocorreu sequer!

Além disso. Acontece que se um Expert Advisor é construído usando objectos dinâmicos, não pode ter memória fixa. Por outro lado, não há relatórios de funcionamento incorrecto com objectos dinâmicos; quantas vezes apaguei e lancei o Expert Advisor...

De qualquer modo, o meu brainstorming sugeriu uma ideia trivial: se não consigo separar os volumes de programas a correr em conjunto, tenho de os executar separadamente e ver como o seu consumo aumenta. O Expert Advisor deve ser lançado não a partir do seu indicador personalizado, mas, suponhamos, a partir de carraças no seu próprio gráfico. Considerando a sua dica relativa ao testador que mede o volume, tudo parece estar bem. Talvez seja isso que Roche quis dizer ao referir-se ao artigo...? Mas mesmo assim, ao reler o artigo, tal pensamento não me ocorreu. Não sem uma pista!

TheXpert :

Deixas-me louco. Sou também culpado pela sua incapacidade de comunicar com as pessoas?

Culpa é culpa, a onda é culpa :)

E já compreendi o vosso ponto de vista sobre a minha extrema mal-educação e pedi desculpa antecipadamente :) Mesmo assim, a minha mal-educação diz-me que é mais produtivo falar por mim, do que pelas pessoas :) Não estamos na Duma do Estado :)

 
Yedelkin:

Sobre (4) explicar: o que significa "se o indicador tiver um tampão de tamanho completo" para não se perder em palpites.

O que quero dizer aqui é que se o gráfico tiver, digamos, 100000 barras e o Expert Advisor estiver a puxar um tampão para todas as 100000 barras - isso não é correcto.

Sobre "Se houver (1) ou (2) é fácil rastrear a queima por provador + expedidor" peço para especificar: ou seja, propõe-se utilizar o provador não só para medir a velocidade do programa, mas também para medir o volume consumido? Sim; uma solução tão simples, nunca me ocorreu sequer!

Bem... Pretende-se executar o testador e algures (no Gestor de Tarefas do Windows, por exemplo) monitorizar a alocação de memória. Não é uma forma muito fiável, mas se o problema estiver na EA, é muito provável que a queima de memória seja muito elevada.

Assim, o brainstorming resultou numa ideia aparentemente trivial: se não conseguirmos dividir volumes de programas a correr em conjunto, temos de os executar separadamente e ver quem tem maior consumo.

Bem, foi assim que foi realmente desenvolvido...
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

Isto é, por exemplo, quando clica no objecto - o evento CHARTEVENT_OBJECT_CLICK não virá imediatamente, mas apenas após a retirada de todos os eventos anteriores da fila.
E, como compreende, a fila está cheia com o EventChartCustom.

...

Alex, tenho agora um problema ligeiramente semelhante. Ou seja, imediatamente após a inicialização da EA, tudo funciona bem. Durante algum tempo não entro de todo no terminal, tento mudar de um painel de informação do utilizador para outro e o programa "bancas". Pode até congelar durante alguns segundos até que o interruptor aconteça. É o mesmo caso?

Ainda não experimentei a sua solução, ocupado com outro assunto, mas vou definitivamente experimentá-la, pois ainda não encontrei a solução pessoalmente. Há uma questão até agora.

No seu exemplo há cinco parâmetros na função OnChartEvent (). O que é aiview?

ulong event_idle=0; bool bidle;
//---
void OnChartEvent(int iview, int id, long lparam, double dparam, string sparam)
  {
    if(id==CHARTEVENT_CUSTOM+VM_IDLE)
      {
        if(event_idle>(ulong)lparam || bidle) // если последнее посланное больше чем пришедшее, то сразу выходим
          {
           bidle=event_idle > (ulong)lparam;
           //---
           if(bidle) return;
           //---
           event_idle=0;
          } 
        event_idle++;
        ChartRedraw(m_chart); // обновили чарт
        EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика
        return; 
      }
    EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика

    /*
        обработка остальных событий
    */
  }
 
tol64:

Alex, tenho agora um problema ligeiramente semelhante. Ou seja, logo após a inicialização da EA, tudo funciona bem. Durante algum tempo não entro de todo no terminal, tento mudar de um painel de informação do utilizador para outro e o programa "bancas". Pode até congelar durante alguns segundos até que o interruptor aconteça. É o mesmo caso?

Sim, é esse mesmo. Tem mais do que um EventChart enviado entre chamadas OnChartEvent. Faça esse complemento que sugeri para analisar o número do evento que chegou e o problema desaparece.

O seu exemplo tem cinco parâmetros na função OnChartEvent (). O que éiview?

Acidentalmente, foi colocado no cabeçalho da função. Ignorem-no.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Não consigo acreditar quanta energia as pessoas têm). Eh, onde estão os meus 17 anos!
 

tol64:

sergeev:
.
..

Assim, por exemplo, ao clicar num objecto, o evento CHARTEVENT_OBJECT_CLICK não virá de imediato, mas apenas depois de todos os eventos anteriores terem sido retirados da fila.
E, como compreende, a fila de eventos está entupida com EventChartCustom.

Pessoal, vamos lá, leiam o ponto 1.1 deste post. A informação aí discutida foi apresentada hoje, podemos considerá-la oficial. Bem, agora não pode haver (neste caso) fenómenos tais como eventos "anteriores" e "bloqueio surdo" de fila por função EventChartCustom. ...Ou precisamos de uma refutação oficial de novas informações do Manual.

TheXpert, obrigado pelo esclarecimento.

 
Yedelkin:

Pessoal, vamos lá, leiam o ponto 1.1 deste post. A informação aí discutida foi apresentada hoje, podemos considerá-la oficial. Bem, não pode (neste caso) haver agora (neste caso) na fila de espera fenómenos como os eventos de eventos "anteriores" e o "bloqueio surdo" da fila pela função EventChartCustom. ...Ou é necessária uma refutação oficial da nova informação do Manual.

isto é como um circo a decorrer?
 
sergeev:
Isto é algum tipo de circo?

Se o vir como um circo, sinta-se à vontade para o apagar, ou tente responder-lhe com base nos seus próprios méritos.

 
e já fez uma nova pergunta?