Timer - pagina 4

 

Per avere un intervallo di eventi OnTimer inferiore a un secondo.

E poter misurare alcuni processi in millisecondi.

Non ho capito affatto l'idea con "...(int delay=0)", per questo l'ho scritto come una stronzata.

 
Yedelkin:
Come avete capito, in questo caso il mio motto è: "Abbasso tutti i miserabili, se potete farne a meno". L'unica cosa che dovete fare è permettere il ritardo della generazione del primo evento Timer a livello del terminale per il tempo scelto da un utente. Non sto sminuendo l'importanza del tuo codice, soprattutto perché semplicemente non l'ho visto.

Come pensate di organizzare il primo ritardo del timer?

Lo stesso secondo timer sarà avviato nel terminale e gli eventi del timer saranno generati per l'Expert Advisor in un certo momento. Tutto è esattamente come ho già suggerito.

 
stringo:

Come pensate di organizzare il primo ritardo del timer?

Lo stesso secondo timer verrebbe avviato nel terminale e ad un certo punto gli eventi del timer inizierebbero ad essere generati per l'Expert Advisor. Tutto è assolutamente lo stesso come ho già suggerito.

Avendo trovato la funzione EventSetTimer(14400, 7029) in OnInit() , il terminale attiverà il timer interno e genererà il primo evento Timer esattamente a 7029 secondi dall'inizio del programma (diciamo, alle 12-00), come desidera l'utente. Ulteriori eventi del timer saranno generati a intervalli di una volta ogni quattro ore. Un evento ogni 4 ore, non 14400 eventi, dove 13399 eventi del timer sono senza significato per l'utente.

Questo approccio, secondo me, è radicalmente diverso da quello da lei suggerito. Perché nella mia variante il secondo timer interno (che conta 7029 secondi) funzionerà per un tempo limitato solo dopo l'inizializzazione dell'Expert Advisor, e fermerà il suo lavoro senza intasare la coda degli eventi. La vostra variante prevede la generazione continua di eventi ogni secondo, dal primo all'ultimo minuto di lavoro dell'esperto, di cui solo ogni 14400esimo evento avrà almeno un certo peso per un utente.
 
pusheax:

Per avere una gamma di eventi OnTimer inferiore a un secondo.

Ed essere in grado di misurare alcuni processi in millisecondi.

In realtà il parametro attuale"int seconds// numero di secondi" definisce la periodicità degli eventi del timer, non alcuni "ritardi per OnTimer". Imparare la matematica. Per quanto riguarda i millisecondi, almeno leggete la prima pagina del thread per cominciare.

pusheax:

Non ho capito affatto l'idea di "...(int delay=0)" ed è per questo che ho scritto che è una schifezza.


Capisco. E' un po' come dire "prima che tu te ne accorga". Va bene, succede :) Tutti noi a volte vogliamo condividere la nostra visione della bellezza con gli altri.

 
Yedelkin:

Ecco come la vedo io: avendo trovato la funzione EventSetTimer(14400, 7029) in OnInit() , il terminale attiverà il secondo timer interno e genererà il primo evento Timer esattamente 7029 secondi dopo l'inizio del programma (diciamo alle 12-00), come desidera l'utente. Ulteriori eventi del timer saranno generati a intervalli di una volta ogni quattro ore. Un evento ogni 4 ore, non 14400 eventi, dove 13399 eventi del timer sono senza significato per l'utente.

Questo approccio, credo, è radicalmente diverso da quello che hai suggerito. Perché nella mia variante il secondo timer interno (che conta 7029 secondi) funzionerà per un tempo limitato solo dopo l'inizializzazione di EA, e smetterà di funzionare, senza intasare la coda degli eventi. La vostra variante prevede la generazione continua di eventi ogni secondo, dal primo all'ultimo minuto di lavoro dell'esperto, di cui solo ogni 14400esimo evento avrà almeno un certo peso per un utente.

Ok

Nella funzione OnInit avvia il timer EventSetTimer(7029);

Nella funzione OnTimer al primo arrivo disabilita il precedente timer EventKillTimer() e avvia un nuovo timer EventSetTimer(1440);

 
stringo:

Nella funzione OnTimer al primo arrivo, disattivare il precedente timer EventKillTimer() e avviare un nuovo timer EventSetTimer(1440);

Funzionerà correttamente? Qualcuno ha detto non molto tempo fa che la funzione EventSetTimer è essenzialmente per una chiamata una tantum dall'init.
 
stringo:

Ok

Nella funzione OnInit avviare il timer EventSetTimer(7029);

Nella funzione OnTimer al primo arrivo, disabilita il timer precedente EventKillTimer() e avvia un nuovo timer EventSetTimer(1440);

Oh, la luce alla fine del tunnel! Chiamare EventSetTimer() all'interno della stessa OnTimer()? Lo proverò sicuramente quando arriverò al terminale. Grazie per la soluzione intelligente!
 
TheXpert:
Funzionerà correttamente? Qualcuno ha detto non molto tempo fa che la funzione EventSetTimer è essenzialmente destinata ad essere chiamata una volta dall'init.
L'ho fatto. Questa è un'applicazione comune. Il che non invalida affatto gli esotici (se ne avete voglia).
 
stringo:

Ok

Nella funzione OnInit avviare il timer EventSetTimer(7029);

Nella funzione OnTimer al primo arrivo, disabilita il timer precedente EventKillTimer() e avvia un nuovo timer EventSetTimer(1440);

Tuttavia, nel tester questo approccio non ha funzionato per un po'. Passato ai contatori nel tester.

Ma è tutto lirico, i millisecondi sono molto desiderabili. Mi unisco agli auguri.

Ora ho bisogno di una risoluzione temporale di 100 ms, ma ho una tale voglia ora e non so di cosa avrò bisogno domani. Non mi piacerebbe avere una soglia di bitrate così alta, 1000 ms sono troppo spessi, i millisecondi sono standard. Se qualcuno stupidamente fa traboccare la coda - è la sua tragedia (ci sono sempre molti modi molto convenienti per mandare in crash il programma anche con il terminale). Capiremo cosa possiamo e non possiamo fare prima o poi :)

 

Non è più possibile passare ai millisecondi.

Quanti EAs già scritti cominceranno a generare 1.000 volte più eventi timer di quelli previsti dall'autore?