Características da linguagem mql5, subtilezas e técnicas - página 92

 
Slava:
Qual é a probabilidade de o tempo do computador local mudar entre duas chamadas para GetMicrosecondsCount usadas para medir o tempo em microssegundos?

Não é zero.

 
TheXpert:
Discussão muito construtiva )

Só mais alguns rabiscos removidos permanentemente e pronto.

Chega de tolerar aqueles que se apressam para o embargo, tentar chamar a realidade das funções WinAPI de insecto e culpar-nos. Haverá claramente mais construtivo.

 
fxsaber:

Não é zero.

Qual é a probabilidade de perda de tempo de troca cliente/servidor em milissegundos? Provavelmente mais do que a probabilidade de mudar a hora local.

 
Renat Fatkhullin:

Basta apagar mais alguns rabiscos permanentemente e pronto.

Chega de tolerar aqueles que se apressam para o embargo, tentando chamar a realidade de insecto e nos culpar. Haverá claramente mais.

ligeiramente à direita do tema, na direção de OnTimer() )))

Não me lembro onde li, lá escreveu um representante da MQ, que é possível (para quem tem uma coceira forte ) mudar o sistema para um atraso de 1ms e então, se você usar EventSetMillisecondTimer(...), OnTimer() também funcionará com um erro de cerca de 1 ms, mas não de 16 ms

Se eu entendi corretamente, OnTimer() opera com o atraso do sistema, certo?


ps. enviou um pedido para Servcie-desk ontemNão processado,Iniciado: 2018.07.30 12:52,#2117844, poderia ajudar a processá-lo, está pendurado desde ontem ))
 

OnTimer trabalha com o erro do temporizador WinAPI do sistema, controlado através da função WinAPI GetTickCount. Esta é uma forma muito rápida e barata de cronometragem que tem um impacto mínimo no processo a ser medido. Isto significa que não afecta muito o resultado final.

A precisão deste temporizador pode ser melhorada para todo o sistema operacional, mas ao custo tanto do aumento do consumo da CPU como dos efeitos induzidos aleatórios e massivos da massa de programas que começam a

  • medir o tempo com mais precisão
  • passar menos tempo em deslizamentos
  • alguns intervalos de tempo que funcionam para erros comuns degeneram em mau comportamento
  • E mais algumas falhas fixes.

O problema do temporizador do sistema Windows tem mais de 20 anos de idade. Mas é perigoso mudar o comportamento e a precisão do temporizador antigo.

É por isso que novos e mais precisos métodos de cronometragem foram introduzidos há muito tempo. Mas eles são de recursos intensivos e pouco razoáveis para serem usados como um substituto completo do velho temporizador.

Nosso timer com maior precisão é implementado com a GetMicrosecondCount. Deve ser usado conscientemente e com o entendimento de que custa mais do que o GetTickCount. Além disso, o custo das chamadas para a GetMicrosecondCount deve ser explicitamente considerado em casos de medição precisa.

É muito fácil enganar a si mesmo e aos outros, usando mal o temporizador e não mantendo o benchmark limpo.

 
Renat Fatkhullin:

Chega de tolerar aqueles que correm para a emboscada e tentam chamar a realidade das funções WinAPI de insecto e nos culpam. Haverá claramente mais construtivo.

Você pode simplesmente escrever em ajuda que GetMicrosecondsCount depende do tempo do computador local e pode funcionar inadequadamente quando ele é modificado. GetTickCount não o faz.

Então, se você precisa resolver isso no nosso nível e no seu, você provavelmente deveria fazer isso no nosso.

Por que você deveria proibir?

 
Renat Fatkhullin:

O OnTimer funciona com erro do temporizador WinAPI do sistema, controlado através da função WinAPI GetTickCount. Esta é uma forma muito rápida e barata de cronometragem que tem um impacto mínimo no processo a ser medido. Isto significa que não afecta muito o resultado final.

A precisão deste temporizador pode ser melhorada para todo o sistema operacional, mas ao custo tanto do aumento do consumo da CPU como dos efeitos induzidos aleatórios e massivos da massa de programas que começam a

  • medir o tempo com mais precisão
  • passar menos tempo em deslizamentos
  • alguns intervalos de tempo que funcionam para os intervalos de tempo normais degeneram em comportamento completamente errado
  • e algumas falhas mais fixes.

O problema do temporizador do sistema Windows tem mais de 20 anos de idade. Mas é perigoso mudar o comportamento e a precisão do temporizador antigo.

É por isso que novos e mais precisos métodos de cronometragem foram introduzidos há muito tempo. Mas eles são de recursos intensivos e pouco razoáveis para serem usados como um substituto completo do velho temporizador.

Nosso timer com maior precisão é implementado com GetMicrosecondsCount. Deve ser usado conscientemente e com o entendimento de que custa mais do que o GetTickCount. Além disso, o custo das chamadas para a GetMicrosecondsCount deve ser explicitamente considerado em casos de medição precisa.

É muito fácil enganar a si mesmo e aos outros usando mal o temporizador e falhando em manter o benchmark limpo.

oops, era isso que eu estava pensando depois que o representante do MQ escreveu sobre a diminuição do tempo do sistema))

por isso apoio que não seja necessário mudar nesta direcção.

a propósito, eu gostaria de saber se algum desenvolvimento é feito no sentido dareflexão como em C# ou pelo menos como em impulso ? por exemplo serialização / desserialização seria mais conveniente para implementar

 
TheXpert:

Você pode simplesmente escrever na ajuda que GetMicrosecondsCount depende do tempo do computador local e pode não funcionar adequadamente quando ele é modificado. E o GetTickCount não depende disso.

Está escrito na Ajuda: A função GetMicrosecondCount() retorna o número de microssegundos, decorridos desde o início do programa MQL5.

Isso foi o que eu disse claramente: para medir o número de microssegundos.

O problema da medição de microssegundos em relação ao problema também pode ser resolvido, embora de uma forma um tanto embaraçosa.

Por que devemos proibir?

Temos de proibir.

Em primeiro lugar, não há problema com a medição do tempo do temporizador de microssegundos. Segundo - algumas pessoas estão ansiosas para arranjar uma desculpa para dar um ataque, e depois ficar com ela até ao fim.

Mais uma vez - as regras mudaram.

Não mais insultos ou "você deve" serão aceitos. Vamos fazer uma varredura sem aviso prévio.

 
Renat Fatkhullin:

Diz isso na ajuda: A função GetMicrosecondCount() retorna o número de microssegundos decorridos desde o início do programa MQL5.

E está escrito para a função GetTickCount:

A função GetTickCount() retorna o número de milissegundos que passaram desde que o sistema foi iniciado.

As frases são quase idênticas, mas uma função depende da hora local e a outra não. Como devemos adivinhar?

 
TheXpert:

E está escrito para a função GetTickCount:

As frases são quase idênticas, mas uma função depende da hora local, a outra não. Como é suposto adivinharmos isso?

Esta é a WinAPI.

Um lembrete sobre o uso de frases do tipo "deve" explícita ou implicitamente. O uso de "metaquotes deve" em vez de "por favor considere" é agora inaceitável.