Yedelkin: Oh, la luce alla fine del tunnel! Dovreste chiamare EventSetTimer() all'interno di OnTimer() stesso? Lo proverò sicuramente quando arriverò al terminale. Grazie per la soluzione intelligente!
Ho sempre visto questa soluzione.
Solo che non ho provato il modo migliore per
EventKillTimer() o EventSetTimer(0); per uccidere il timer.
I millisecondi sono molto desiderati. Mi unisco agli auguri.
Ora è pericoloso in Expert Advisor. Per esempio, la funzione sincrona MessageBox() può accodarsi rapidamente quando l'utente lascia il terminale (naturalmente, si può dire che il timer può essere disattivato prima di tali funzioni).
Ma se hanno fatto la gestione delle interruzioni...
Questo è ora pericoloso nell'Expert Advisor. Per esempio, la funzione sincrona MessageBox() può mettersi rapidamente in coda quando l'utente lascia il terminale (naturalmente, si può dire che il timer può essere disattivato prima di tali funzioni).
Se solo facessero la gestione degli interrupt...
Non usare interruzioni. Non so cosa intendi però, forse è una buona... :)
A proposito di code - si possono usare anche i secondi, se si va a dormire. :) Non usarlo se non sai come elaborare le conseguenze - è una ricetta semplice e universale.
......... La funzione sincrona MessageBox(), per esempio, può mettersi rapidamente in coda quando l'utente si allontana dal terminale.(Naturalmente, si può dire che si può disabilitare il timer prima di tali funzioni) ........
Quanti esperti già scritti inizieranno a generare un numero di eventi timer 1000 volte superiore a quello previsto dall'autore?
Solo un'opinione: e se c'è proprio la possibilità di aggiungere millisecondi per chi lo vuole, e l'intoppo è solo nei vecchi EA, allora perché non introdurre una nuova funzione
boolEventSetTimer(
int seconds, // количество секунд для OnTimerboolпереключатель=false// переключатель: false - период измеряется в секундах, true - в миллисекундах
);
Rendi tutto multi-secondo, e se lo switch==false, moltiplica il valore dei secondi una volta per 1000 (per i vecchi EA, per esempio).
Questo è ora pericoloso nell'Expert Advisor. Per esempio, la funzione sincrona MessageBox() può mettersi rapidamente in coda quando l'utente lascia il terminale (naturalmente, si può dire che il timer può essere disattivato prima di tali funzioni).
Ma se hanno fatto la gestione delle interruzioni...
OnTimer, OnTick, OnTrade... Queste sono le interruzioni.
OnTimer, OnTick, OnTrade... Queste sono interruzioni.
Un interrupt è quando OnTick è in esecuzione e un evento più importante, come OnTimer, è arrivato. OnTick viene messo in pausa, il codice OnTimer viene eseguito, poi OnTick continua a funzionare di nuovo.
Yurich: Un'interruzione è quando OnTick viene eseguito e un evento più importante, come OnTimer, è arrivato. OnTick viene messo in pausa, il codice OnTimer viene eseguito, poi OnTick continua a funzionare di nuovo.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Oh, la luce alla fine del tunnel! Dovreste chiamare EventSetTimer() all'interno di OnTimer() stesso? Lo proverò sicuramente quando arriverò al terminale. Grazie per la soluzione intelligente!
Ho sempre visto questa soluzione.
Solo che non ho provato il modo migliore per
EventKillTimer() o EventSetTimer(0); per uccidere il timer.
I millisecondi sono molto desiderati. Mi unisco agli auguri.
Ora è pericoloso in Expert Advisor. Per esempio, la funzione sincrona MessageBox() può accodarsi rapidamente quando l'utente lascia il terminale (naturalmente, si può dire che il timer può essere disattivato prima di tali funzioni).
Ma se hanno fatto la gestione delle interruzioni...
Non è più possibile andare al millisecondo.
Quanti Expert Advisors che sono già stati scritti inizieranno a generare 1000 volte più eventi timer di quanto previsto dall'autore?
No, no... Non c'è bisogno di cambiarlo così. Basta aggiungere una nuova funzione EventSetTimerMS(long ms);
È necessario lasciare quello vecchio, solo per compatibilità. (Può essere facilmente emulato chiamando EventSetTimerMS(1000); )
Questo è ora pericoloso nell'Expert Advisor. Per esempio, la funzione sincrona MessageBox() può mettersi rapidamente in coda quando l'utente lascia il terminale (naturalmente, si può dire che il timer può essere disattivato prima di tali funzioni).
Se solo facessero la gestione degli interrupt...
Non usare interruzioni. Non so cosa intendi però, forse è una buona... :)
A proposito di code - si possono usare anche i secondi, se si va a dormire. :) Non usarlo se non sai come elaborare le conseguenze - è una ricetta semplice e universale.
......... La funzione sincrona MessageBox(), per esempio, può mettersi rapidamente in coda quando l'utente si allontana dal terminale.(Naturalmente, si può dire che si può disabilitare il timer prima di tali funzioni) ........
Quanti esperti già scritti inizieranno a generare un numero di eventi timer 1000 volte superiore a quello previsto dall'autore?
Solo un'opinione: e se c'è proprio la possibilità di aggiungere millisecondi per chi lo vuole, e l'intoppo è solo nei vecchi EA, allora perché non introdurre una nuova funzione
Rendi tutto multi-secondo, e se lo switch==false, moltiplica il valore dei secondi una volta per 1000 (per i vecchi EA, per esempio).
Questo è ora pericoloso nell'Expert Advisor. Per esempio, la funzione sincrona MessageBox() può mettersi rapidamente in coda quando l'utente lascia il terminale (naturalmente, si può dire che il timer può essere disattivato prima di tali funzioni).
Ma se hanno fatto la gestione delle interruzioni...
OnTimer, OnTick, OnTrade... Queste sono le interruzioni.
OnTimer, OnTick, OnTrade... Queste sono interruzioni.
Un'interruzione è quando OnTick viene eseguito e un evento più importante, come OnTimer, è arrivato. OnTick viene messo in pausa, il codice OnTimer viene eseguito, poi OnTick continua a funzionare di nuovo.