Timer - pagina 6

 
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.
Oh, cielo. Questo è un sogno terribile.
 
pusheax:

OnTimer, OnTick, OnTrade... Queste sono le interruzioni.

È quello che ho pensato all'inizio. Ma ci sono delle varianti. Per esempio, non possiamo marcare qualche OnTimer con la parola interrupts e sapere che sarà chiamato esattamente al momento in cui si verifica l'evento interrompendo l'elaborazione di qualsiasi altro evento (secondo lo schema MSDOS single-thread - salvare lo stack, gestire gli interrupts, recuperare lo stack, passare il controllo). Tale schema potrebbe risolvere molti problemi usando metodi più semplici. Per esempio, OnTick chiamato da questo schema sembra piuttosto bello. Ci sono sottigliezze qui - l'elaborazione di input ripetuti sarà necessaria (ad esempio due tick con un piccolo intervallo), ma è risolvibile in generale.
 
TheXpert:
Porca puttana. Questo è un brutto sogno.
In realtà Yurich ha descritto l'interrupt in senso classico, non OnTick, OnTimer gestione degli interrupt
 
Per esempio, se qualcuno imposta Sleep(100000) nel gestore OnTick; così oraOnTimer, OnTrade non hanno più vita?
 
TheXpert:
Che peccato. Sì, è un sogno spaventoso.

No, non fa paura. Ci sono antichi schemi provati e testati su come evitare la frangia.

Ma è ancora un sogno, non credo che gli sviluppatori lo faranno, anche se i benefici sono innegabili.

Io per esempio potrei eseguire calcoli in background in OnTimer, con una piccola frequenza (circa una volta ogni 5 secondi) della durata di mezzo periodo del timer. E non ci sarebbe bisogno di preoccuparsi di gestire i tick, che potrebbero semplicemente interrompere il calcolo in background, per poi riportarlo correttamente al suo posto. E ora è più facile metterlo in un grafico separato che elaborarlo correttamente nello stesso thread in cui le zecche ticchettano. Anche se ci sarebbe abbastanza tempo per tutti loro nello stesso thread.

 
pusheax:
Per esempio, se qualcuno imposta Sleep(100000); nel gestore OnTick,OnTimer e OnTrade non hanno alcuna vita?

dal timer, e i nuovi tick saranno ignorati. l'evento commerciale rimarrà nella coda e sarà gestito

Non confondere gli eventi Tick, Trade, Timer e i loro gestori OnTick, OnTrade, OnTimer

 
pusheax:
Per esempio, se qualcuno imposta Sleep(100000); nel gestore OnTick,OnTimer, OnTrade non avranno vita?
In questo momento è esattamente così. Ma il suicidio non è una cosa difficile. È peggio, quando c'è una casella di messaggio sul mio schermo, e sto bevendo il tè in cucina. Yurich fa un buon punto.
 
stringo:
In realtà Yurich ha descritto l'interrupt in senso classico, non OnTick, OnTimer gestione degli interrupt.

Capisco quello che ha descritto.

Sincronizzare i dati e interrompere l'accesso in un'applicazione a thread singolo è il massimo dell'idiozia.

 
MetaDriver:
Questo è il modo in cui è ora. Ma il suicidio non è difficile, è peggio quando c'è una casella di messaggio sullo schermo e io sono in cucina a bere il tè. Yurich fa un buon punto.
Ah, ora ho capito, l'evento Timer stesso accadrà ma la sua gestione OnTimer sarà ritardata fino al completamento di OnTick.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
pusheax:
Probabilmente è così che funziona.
Se solo :)