Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 92

 
Slava:
Qual è la probabilità che il tempo del computer locale cambi tra due chiamate a GetMicrosecondsCount usate per misurare il tempo in microsecondi?

Non zero.

 
TheXpert:
Discussione molto costruttiva )

Solo qualche altro scribacchino definitivamente cancellato e questo è tutto.

Non si può più tollerare chi si precipita all'embargo, cerca di chiamare la realtà delle funzioni WinAPI un bug e dà la colpa a noi. Ci sarà chiaramente più costruttivo.

 
fxsaber:

Non zero.

Qual è la probabilità di perdita di tempo di scambio client/server in millisecondi? Probabilmente più della probabilità di cambiare l'ora locale.

 
Renat Fatkhullin:

Basta eliminare qualche altro scribacchino in modo permanente e il gioco è fatto.

Non tolleriamo più coloro che si precipitano verso l'embargo, cercando di chiamare la realtà un bug e dare la colpa a noi. Chiaramente ce ne saranno altri.

un po' a destra dell'argomento, in direzione di OnTimer())

Non ricordo dove ho letto, lì un rappresentante di MQ ha scritto che è possibile (per chi ha un forte prurito ) passare il sistema a un ritardo di 1 ms e poi, se si usa EventSetMillisecondTimer(...), anche OnTimer() funzionerà con un errore di circa 1 ms, ma non 16 ms

Se ho capito bene, OnTimer() opera con il ritardo del sistema, giusto?


ps. ha inviato una richiesta al servcie-desk ieriUnprocessed,Started: 2018.07.30 12:52,#2117844, potreste aiutare a processarla, è in sospeso da ieri ))
 

OnTimer funziona con l'errore del timer WinAPI di sistema, controllato attraverso la funzione WinAPI GetTickCount. Questo è un modo molto veloce ed economico di cronometrare che ha un impatto minimo sul processo da misurare. Questo significa che non influisce molto sul risultato finale.

La precisione di questo timer può essere migliorata per l'intero sistema operativo, ma al costo di un maggiore consumo di CPU e degli effetti casuali e massicci indotti dalla massa di programmi che iniziano a

  • misurare il tempo in modo più accurato
  • passare meno tempo nelle slitte
  • alcuni timeout che funzionano per errori comuni degenerano in un vero e proprio cattivo comportamento
  • E altri glitch interessanti

Il problema del timer di sistema di Windows ha più di 20 anni. Ma è pericoloso cambiare il comportamento e la precisione del vecchio timer.

Ecco perché da tempo sono stati introdotti nuovi metodi di cronometraggio più accurati. Ma sono ad alta intensità di risorse e irragionevoli da usare come una completa sostituzione del vecchio timer.

Il nostro timer con maggiore precisione è implementato con GetMicrosecondCount. Dovrebbe essere usato consapevolmente e con la consapevolezza che costa più di GetTickCount. Inoltre, il costo delle chiamate a GetMicrosecondCount dovrebbe essere esplicitamente preso in considerazione nei casi di misurazione accurata.

È molto facile ingannare se stessi e gli altri usando male il timer e non tenendo pulito il punto di riferimento.

 
Renat Fatkhullin:

Non si può più tollerare coloro che corrono all'imboscata e cercano di chiamare la realtà delle funzioni WinAPI un bug e dare la colpa a noi. Ci sarà chiaramente più costruttivo.

Potete semplicemente scrivere nell'aiuto che GetMicrosecondsCount dipende dal tempo del computer locale e può funzionare in modo inadeguato quando viene modificato. GetTickCount non lo fa.

Quindi, se hai bisogno di risolverlo al nostro livello e al tuo, probabilmente dovresti farlo al nostro.

Perché si dovrebbe vietare?

 
Renat Fatkhullin:

OnTimer funziona con l'errore del timer WinAPI di sistema, controllato tramite la funzione WinAPI GetTickCount. Questo è un modo molto veloce ed economico di cronometrare che ha un impatto minimo sul processo da misurare. Questo significa che non influisce molto sul risultato finale.

La precisione di questo timer può essere migliorata per l'intero sistema operativo, ma al costo di un maggiore consumo di CPU e degli effetti casuali e massicci indotti dalla massa di programmi che iniziano a

  • misurare il tempo in modo più accurato
  • passare meno tempo nelle slitte
  • alcuni timeout che funzionano per timeout normali degenerano in un vero e proprio comportamento scorretto
  • e alcuni glitch più freddi.

Il problema del timer di sistema di Windows ha più di 20 anni. Ma è pericoloso cambiare il comportamento e la precisione del vecchio timer.

Questo è il motivo per cui sono stati introdotti da tempo nuovi metodi di cronometraggio più accurati. Ma sono ad alta intensità di risorse e irragionevoli da usare come una sostituzione completa del vecchio timer.

Il nostro timer con maggiore precisione è implementato con GetMicrosecondsCount. Dovrebbe essere usato consapevolmente e con la consapevolezza che costa più di GetTickCount. Inoltre, il costo delle chiamate a GetMicrosecondsCount dovrebbe essere esplicitamente preso in considerazione nei casi di misurazione accurata.

È molto facile ingannare se stessi e gli altri usando male il timer e non riuscendo a mantenere pulito il punto di riferimento.

oops, è quello che stavo pensando dopo che il rappresentante di MQ ha scritto sulla diminuzione del tempo del timer del sistema ))

quindi sono d'accordo, che non è necessario cambiare qualcosa in questa direzione

A proposito, vorrei sapere se sono stati fatti degli sviluppi verso lariflessione come in C# o almeno come in boost? per esempio la serializzazione / deserializzazione sarebbe più conveniente da implementare

 
TheXpert:

Potete semplicemente scrivere nell'aiuto che GetMicrosecondsCount dipende dal tempo del computer locale e potrebbe non funzionare adeguatamente quando viene modificato. E GetTickCount non dipende da questo.

È scritto nella Guida: La funzione GetMicrosecondCount() restituisce il numero di microsecondi trascorsi dall'inizio del programma MQL5.

È quello che ho detto chiaramente: misurare il numero di microsecondi.

Anche il problema della misurazione al microsecondo rispetto al problema può essere risolto, anche se in modo un po' scomodo.

Perché dovremmo vietare?

Dobbiamo vietare.

In primo luogo, il timer a microsecondi non ha problemi con la misurazione del tempo. In secondo luogo - alcuni hanno un prurito diretto a trovare una scusa per fare una scenata, e poi vi si attaccano fino all'ultimo.

Ancora una volta - le regole sono cambiate.

Non saranno più accettati insulti o "devi". Faremo una perlustrazione senza preavviso.

 
Renat Fatkhullin:

Lo dice nella guida: La funzione GetMicrosecondCount() restituisce il numero di microsecondi trascorsi dall'inizio del programma MQL5.

Ed è scritto per la funzione GetTickCount:

La funzione GetTickCount() restituisce il numero di millisecondi che sono passati dall'avvio del sistema.

Le frasi sono quasi identiche ma una funzione dipende dall'ora locale e l'altra no. Come dovremmo indovinare?

 
TheXpert:

Ed è scritto per la funzione GetTickCount:

Le frasi sono quasi identiche, ma una funzione dipende dall'ora locale, l'altra no. come possiamo indovinarlo?

Questa è la WinAPI.

Un promemoria sull'uso delle frasi "dovrebbe" in modo esplicito o implicito. L'uso di "le meta-citazioni devono" invece di "si prega di considerare" è ora inaccettabile.

Motivazione: