Flusso di eventi. Come controllare e rendere l'evento inattivo? (+ risolto) - pagina 5

 
Yedelkin:

OK, capisco.TheXpert ha fatto un'onda e il problema è iniziato.

È un vero peccato per te. È colpa mia se non riesci a comunicare con le persone?

L'Expert Advisor ha un consumo fisso di memoria, se

(1) nessuna emulazione del buffer

(2) nessun disegno di oggetti sulla storia.

(3) nessun bug di allocazione della memoria. Ma questo si vede di solito con deinit.

(4) non ci sono bug che lavorano con gli indici. Se un indicatore ha un buffer di dimensioni complete, è un bug.

Se c'è (1) o (2) bruciare è facile da tracciare con tester + dispatcher. Viene trattato con il controllo delle dimensioni.

Gli eventi da soli non mangiano affatto la memoria (in ordine crescente). Pertanto, se non c'è un problema nell'Expert Advisor, il problema è sicuramente nell'indicatore.

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

In un EA, il consumo di memoria è fisso se

(1) non c'è emulazione del buffer

(2) non c'è nessun disegno di oggetti sulla storia.

(3) nessun bug di allocazione della memoria. Ma questo si vede di solito con la deiniterazione.

(4) nessun bug di lavoro con gli indici. Se un indicatore ha un buffer completo, è un bug.

Se avete (1) o (2), è facile rintracciare il sovraccarico con il tester e il dispatcher. Può essere trattato con il controllo delle dimensioni.

Gli eventi stessi non consumano affatto memoria (ascendente). Pertanto, se l'Expert Advisor non ha problemi, il problema è sicuramente nell'isolatore.

Grazie mille per una risposta così dettagliata. Ci penserò. (1) - (3) sicuramente no.

Riguardo a (4), per favore spiegate: cosa significa "se l'indicatore porta il buffer alla dimensione massima", per non perdersi in congetture.

Riguardo a "Se c'è (1) o (2) masterizzazione è facile da rintracciare tramite tester + manager" chiedo di specificare: cioè suggerisci di usare il tester non solo per la misurazione della velocità del programma, ma anche per la misurazione del volume consumato? Già; una soluzione così semplice, non mi era mai venuta in mente!

Più in là. Si scopre che se un Expert Advisor è costruito con oggetti dinamici, non può avere una memoria fissa. D'altra parte, non ci sono segnalazioni di funzionamento scorretto con oggetti dinamici; quante volte ho cancellato e lanciato l'Expert Advisor...

Comunque, il mio brainstorming mi ha suggerito un'idea banale: se non posso separare i volumi dei programmi che girano insieme, devo farli girare separatamente e vedere come aumenta il loro consumo. L'Expert Advisor dovrebbe essere lanciato non dal suo indicatore personalizzato, ma, supponiamo, dai tick sul proprio grafico. Considerando il tuo suggerimento sul tester che misura il volume, tutto sembra essere a posto. Forse è questo che intendeva Roche riferendosi all'articolo...? Ma comunque, rileggendo l'articolo un tale pensiero non mi è venuto in mente. Non senza un indizio!

TheXpert :

Mi fai impazzire. Sono anche da biasimare per la tua incapacità di comunicare con le persone?

La colpa è colpa, l'onda è colpa :)

E ho già capito il tuo punto di vista sulla mia estrema maleducazione e mi sono scusato in anticipo :) Anche così, la mia maleducazione mi dice che è più produttivo parlare per me stesso, piuttosto che per la gente :) Non siamo nella Duma di Stato :)

 
Yedelkin:

Riguardo a (4), per favore spiegate: cosa significa "se l'indicatore ha un buffer di dimensioni complete" per non perdersi in congetture.

Quello che voglio dire qui è che se il grafico ha, diciamo, 100000 barre e l'Expert Advisor sta tirando un buffer per tutte le 100000 barre - questo non è giusto.

Riguardo a "Se c'è (1) o (2) è facile rintracciare la combustione tramite tester + dispatcher" chiedo di specificare: cioè proponi di usare il tester non solo per misurare la velocità del programma, ma anche per misurare il volume consumato? Già; una soluzione così semplice, non mi era mai venuta in mente!

Bene... Intendi eseguire il tester e da qualche parte (in Windows Task Manager per esempio) monitorare l'allocazione della memoria. Non è un modo molto affidabile, ma se il problema è in EA, molto probabilmente la memoria bruciata sarà molto alta.

Così, il brainstorming ha portato a un'idea apparentemente banale: se non possiamo dividere i volumi dei programmi che girano insieme, dobbiamo eseguirli separatamente e vedere chi ha un consumo maggiore.

Beh, è così che è stato effettivamente sviluppato...
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

Cioè, per esempio, quando si clicca sull'oggetto - l'evento CHARTEVENT_OBJECT_CLICK non verrà immediatamente, ma solo dopo il ritiro di tutti gli eventi precedenti dalla coda.
E come avete capito, la coda è riempita strettamente con l'EventChartCustom.

...

Alex, ora ho un problema leggermente simile. Cioè, subito dopo l'inizializzazione di EA tutto funziona bene. Per un po' di tempo non entro affatto nel terminale, provo a passare da un pannello di informazioni utente a un altro e il programma si "blocca". Può anche bloccarsi per qualche secondo fino a quando non avviene lo scambio. È lo stesso caso?

Non ho ancora provato la tua soluzione, impegnato con un altro problema, ma la proverò sicuramente, dato che non ho trovato la soluzione da solo. Finora c'è una domanda.

Nel tuo esempio ci sono cinque parametri nella funzione OnChartEvent (). Qual è l'iview?

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, ora ho un problema leggermente simile. Cioè, subito dopo l'inizializzazione di EA tutto funziona bene. Per un po' di tempo non entro affatto nel terminale, provo a passare da un pannello di informazioni utente a un altro e il programma si "blocca". Può anche bloccarsi per qualche secondo fino a quando non avviene lo scambio. È lo stesso caso?

Sì, è quello. Hai più di un EventChart inviato tra le chiamate OnChartEvent. Fai quell'aggiunta che ti ho suggerito per analizzare il numero dell'evento che è arrivato e il problema sparisce.

Il tuo esempio ha cinque parametri nella funzione OnChartEvent (). Cos'èiview?

Accidentalmente l'ho messo nell'intestazione della funzione. Ignoratelo.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Non posso credere a quanta energia abbia la gente). Eh, dove sono i miei 17 anni!
 

tol64:

sergeev:
.
..

Così, per esempio, quando si clicca su un oggetto, l'evento CHARTEVENT_OBJECT_CLICK non arriverà subito, ma solo dopo che tutti gli eventi precedenti sono stati rimossi dalla coda.
E come avete capito, la coda degli eventi è intasata da EventChartCustom.

Gente, avanti, leggete il punto 1.1 di questo post. Le informazioni discusse lì sono state presentate oggi, possiamo considerarle ufficiali. Bene, ora non ci possono essere (in questo caso) fenomeni come eventi "precedenti" e "blocco sordo" della coda da parte della funzione EventChartCustom. ...O abbiamo bisogno di una confutazione ufficiale di nuove informazioni dal Manuale.

TheXpert, grazie per il chiarimento.

 
Yedelkin:

Gente, avanti, leggete il punto 1.1 di questo post. Le informazioni discusse lì sono state presentate oggi, possiamo considerarle ufficiali. Ebbene non ci possono essere (in questo caso) ora nella coda fenomeni come eventi-eventi "precedenti" e "sordo che blocca" la coda dalla funzione EventChartCustom. ...Oppure è necessaria una confutazione ufficiale delle nuove informazioni del Manuale.

è come un circo in corso?
 
sergeev:
Si tratta di una specie di circo?

Se lo vedete come un circo, sentitevi liberi di cancellarlo, o provate a rispondere per i suoi meriti.

 
e hai già fatto una nuova domanda?
Motivazione: