Características del lenguaje mql5, sutilezas y técnicas - página 92

 
Slava:
¿Cuál es la probabilidad de que la hora del ordenador local cambie entre dos llamadas a GetMicrosecondsCount utilizadas para medir el tiempo en microsegundos?

No cero.

 
TheXpert:
Un debate muy constructivo )

Sólo unos pocos garabatos más eliminados permanentemente y ya está.

No hay que tolerar más a los que se precipitan al embargo, intentan llamar a la realidad de las funciones WinAPI como un error y nos culpan a nosotros. Está claro que habrá más constructivos.

 
fxsaber:

No cero.

¿Cuál es la probabilidad de pérdida de tiempo de intercambio cliente/servidor en milisegundos? Probablemente más que la probabilidad de cambiar la hora local.

 
Renat Fatkhullin:

Borra unos cuantos garabatos más de forma permanente y ya está.

No hay que tolerar más a los que se precipitan al embargo, tratando de llamar a la realidad un bicho y culpándonos a nosotros. Está claro que habrá más.

ligeramente a la derecha del tema, en dirección a OnTimer() ))

No recuerdo donde leí, allí un representante de MQ escribió, que es posible (para los que tienen un fuerte prurito ) cambiar el sistema a un retardo de 1ms y entonces, si usas EventSetMillisecondTimer(...), OnTimer() también funcionará con un error de aproximadamente 1 ms, pero no de 16 ms

Si he entendido bien, OnTimer() funciona con el retardo del sistema, ¿verdad?


ps. envié ayer una solicitud a servcie-deskSin procesar,Iniciada: 2018.07.30 12:52,#2117844, podríais ayudar a procesarla, lleva colgada desde ayer ))
 

OnTimer trabaja con el error del temporizador WinAPI del sistema, controlado a través de la función WinAPI GetTickCount. Esta es una forma muy rápida y barata de cronometrar que tiene un impacto mínimo en el proceso que se está midiendo. Esto significa que no afecta mucho al resultado final.

La precisión de este temporizador puede mejorarse para todo el sistema operativo, pero a costa de un mayor consumo de CPU y de los efectos aleatorios y masivos inducidos por la masa de programas que comienzan a

  • medir el tiempo con mayor precisión
  • pasar menos tiempo en los resbalones
  • algunos tiempos de espera que funcionan para errores comunes degeneran en un mal comportamiento absoluto
  • Y algunos otros fallos geniales

El problema del temporizador del sistema Windows tiene más de 20 años. Pero es peligroso cambiar el comportamiento y la precisión de los antiguos.

Por eso hace tiempo que se han introducido nuevos métodos de cronometraje más precisos. Pero consumen muchos recursos y no es razonable usarlos como un reemplazo completo del antiguo temporizador.

Nuestro temporizador con mayor precisión se implementa con GetMicrosecondCount. Debe utilizarse conscientemente y sabiendo que cuesta más que GetTickCount. Además, el coste de las llamadas a GetMicrosecondCount debería tenerse en cuenta explícitamente en los casos de medición precisa.

Es muy fácil engañarse a uno mismo y a los demás si se utiliza mal el temporizador y no se mantiene limpio el punto de referencia.

 
Renat Fatkhullin:

No hay que tolerar más a los que se lanzan a la emboscada, tratando de llamar a la realidad de las funciones WinAPI como un error y culparnos a nosotros. Está claro que habrá más constructivos.

Puede simplemente escribir en la ayuda que GetMicrosecondsCount depende de la hora local del ordenador y puede funcionar inadecuadamente cuando se modifica. GetTickCount no depende de él.

Por lo tanto, si tienes que resolverlo en nuestro nivel y en el tuyo, probablemente tendrás que hacerlo en el nuestro.

¿Por qué hay que prohibir?

 
Renat Fatkhullin:

OnTimer funciona con el temporizador WinAPI del sistema, controlado a través de la función WinAPI GetTickCount. Esta es una forma muy rápida y barata de cronometrar que tiene un impacto mínimo en el proceso que se está midiendo. Esto significa que no afecta mucho al resultado final.

La precisión de este temporizador puede mejorarse para todo el sistema operativo, pero a costa de un mayor consumo de CPU y de los efectos aleatorios y masivos inducidos por la masa de programas que comienzan a

  • medir el tiempo con mayor precisión
  • pasar menos tiempo en los resbalones
  • algunos tiempos de espera que funcionan para los tiempos normales degeneran en un mal comportamiento absoluto
  • y algunas fallas más geniales.

El problema del temporizador del sistema Windows tiene más de 20 años. Pero es peligroso cambiar el comportamiento y la precisión de los antiguos temporizadores.

Por eso hace tiempo que se han introducido nuevos métodos de cronometraje más precisos. Pero consumen muchos recursos y no es razonable usarlos como un reemplazo completo del antiguo temporizador.

Nuestro temporizador con mayor precisión se implementa con GetMicrosecondsCount. Debe utilizarse conscientemente y sabiendo que cuesta más que GetTickCount. Además, el coste de las llamadas a GetMicrosecondsCount debe tenerse en cuenta explícitamente en los casos de medición precisa.

Es muy fácil engañarse a uno mismo y a los demás si se utiliza mal el temporizador y no se mantiene limpio el punto de referencia.

oops, eso es más o menos lo que pensé después de que el representante de MQ escribiera sobre la reducción del tiempo del temporizador del sistema ))

así que estoy de acuerdo, que no es necesario cambiar algo en esta dirección

Por cierto, me gustaría saber si se ha hecho algún desarrollo haciala reflexión como en C# o al menos como en boost... por ejemplo la serialización / deserialización sería más conveniente de implementar

 
TheXpert:

Puede simplemente escribir en la ayuda que GetMicrosecondsCount depende de la hora del ordenador local y puede no funcionar adecuadamente cuando se modifica. Y GetTickCount no depende de él.

Está escrito en la Ayuda: La función GetMicrosecondCount() devuelve el número de microsegundos, transcurridos desde el inicio del programa MQL5.

Eso es lo que he dicho claramente: medir el número de microsegundos.

El problema de la medición de microsegundos con respecto al problema también se puede resolver, aunque de una manera algo incómoda.

¿Por qué debemos prohibir?

Tenemos que prohibir.

En primer lugar, el temporizador de microsegundos no tiene problemas con la medición del tiempo. En segundo lugar, algunas personas están ansiosas por encontrar una excusa para hacer un berrinche y mantenerla hasta el final.

Una vez más, las reglas han cambiado.

No se aceptarán más insultos ni "debes". Haremos un barrido sin previo aviso.

 
Renat Fatkhullin:

Lo dice la ayuda: La función GetMicrosecondCount() devuelve el número de microsegundos transcurridos desde el inicio del programa MQL5.

Y está escrito para la función GetTickCount:

La función GetTickCount() devuelve el número de milisegundos que han pasado desde que se inició el sistema.

Las frases son casi idénticas, pero una función depende de la hora local y la otra no.

 
TheXpert:

Y está escrito para la función GetTickCount:

Las frases son casi idénticas, pero una función depende de la hora local y la otra no.

Esta es la WinAPI.

Un recordatorio sobre el uso de las frases "debería" de forma explícita o implícita. El uso de "las metacitas deben" en lugar de "por favor, considere" es ahora inaceptable.