Temporizador - página 4

 

Ter uma série de eventos OnTimer de menos de um segundo.

E ser capaz de medir alguns processos em milissegundos.

Não compreendi a ideia com "...(int delay=0)" de todo, foi por isso que a escrevi como uma treta.

 
Yedelkin:
Como compreenderam, neste caso o meu lema é: "Abaixo todos os avarentos se conseguirem passar sem eles". A única coisa a fazer é permitir o atraso de geração do primeiro evento Temporizador a nível de terminal pelo tempo escolhido por um utilizador. Não estou a menosprezar a importância do vosso código, especialmente porque simplesmente ainda não o vi.

Como prevê organizar o primeiro atraso do evento a partir do temporizador?

O mesmo segundo temporizador será iniciado no terminal e os eventos do temporizador serão gerados para o Expert Advisor num determinado momento. Tudo é exactamente o mesmo que eu já sugeri.

 
stringo:

Como prevê organizar o primeiro atraso do evento a partir do temporizador?

O mesmo segundo temporizador seria iniciado no terminal e num determinado momento os eventos do temporizador começariam a ser gerados para o Expert Advisor. Tudo é absolutamente o mesmo que eu já sugeri.

É assim que eu imagino. Tendo encontrado a função EventSetTimer(14400, 7029) no OnInit() , o terminal activará o temporizador interno e gerará o primeiro evento do temporizador exactamente aos 7029 segundos após o início do programa (digamos, aos 12-00), como o utilizador desejar. Outros eventos temporais serão gerados a intervalos de uma vez a cada quatro horas. Um evento por 4 horas, não 14400 eventos, onde 13399 eventos temporais não têm significado para o utilizador.

Esta abordagem, na minha opinião, é radicalmente diferente daquela que sugeriu. Porque na minha variante o segundo temporizador interno (contando 7029 segundos) só funcionará por um tempo limitado após a inicialização do Expert Advisor, e parará o seu trabalho sem entupir a fila de eventos. A sua variante proporciona uma geração contínua de cada segundo evento, do primeiro ao último minuto de trabalho do perito, dos quais apenas a cada 14400 evento terá pelo menos algum peso para um utilizador.
 
pusheax:

Ter uma série de eventos OnTimer de menos de um segundo.

E ser capaz de medir alguns processos em milissegundos.

Na realidade, o parâmetro actual"int segundos// número de segundos" define a periodicidade dos eventos do temporizador, não alguns "atrasos para o OnTimer". Aprender a matemática. Em relação aos milissegundos, pelo menos leia a primeira página do fio para começar.

pusheax:

Não percebi a ideia com "...(int delay=0)" de todo, foi por isso que escrevi que é um disparate.


Estou a ver. É um pouco do tipo "só dizer antes de dar por isso". Tudo bem, isso acontece :) Todos nós queremos por vezes partilhar a nossa visão da beleza com os outros.

 
Yedelkin:

É assim que eu o vejo. Tendo encontrado a função EventSetTimer(14400, 7029) no OnInit() , o terminal activará o segundo temporizador interno e gerará o primeiro evento Temporizador exactamente 7029 segundos após o início do programa (digamos, às 12-00), como o utilizador desejar. Outros eventos temporais serão gerados a intervalos de uma vez a cada quatro horas. Um evento por 4 horas, não 14400 eventos, onde 13399 eventos temporais não têm significado para o utilizador.

Esta abordagem, penso eu, é radicalmente diferente da que sugeriu. Porque na minha variante o temporizador de segundos interno (contando 7029 segundos) só funcionará por um tempo limitado após a inicialização da EA, e deixará de funcionar, sem entupir a fila de eventos. A sua variante proporciona uma geração contínua de cada segundo evento, do primeiro ao último minuto de trabalho do perito, dos quais apenas a cada 14400 evento terá pelo menos algum peso para um utilizador.

Ok

Em função OnInit start timer EventSetTimer(7029);

Na função OnTimer na primeira chegada, desactivar o temporizador EventKillTimer( ) anterior e iniciar um novo EventSetTimer(1440) temporizador;

 
stringo:

Na função OnTimer na primeira chegada, desactivar o temporizador EventKillTimer() anterior e iniciar um novo EventSetTimer(1440) temporizador;

Irá funcionar correctamente? Alguém disse não há muito tempo que a função EventSetTimer é essencialmente para uma chamada única do init.
 
stringo:

Ok

Em OnInit function start timer EventSetTimer(7029);

Na função OnTimer em primeiro lugar, desactivar o temporizador anterior EventKillTimer() e iniciar um novo EventSetTimer(1440);

Oh, a luz ao fundo do túnel! Call EventSetTimer() dentro do próprio OnTimer()? Vou definitivamente tentar quando chegar ao terminal. Obrigado pela solução inteligente!
 
TheXpert:
Irá funcionar correctamente? Alguém disse não há muito tempo atrás que a função EventSetTimer é essencialmente destinada a ser chamada uma vez do init.
Eu fiz. Esta é uma aplicação comum. O que não invalida de modo algum os exóticos (se lhe apetecer).
 
stringo:

Ok

Em OnInit function start timer EventSetTimer(7029);

Na função OnTimer em primeiro lugar, desactivar o temporizador anterior EventKillTimer() e iniciar o novo EventSetTimer(1440);

É assim que o tenho feito desde os tempos antigos. No entanto, no testador, esta abordagem não funcionou durante algum tempo. Comutado para balcões no testador.

Mas é tudo lírico. Os milissegundos são muito desejáveis. Associo-me aos desejos.

Agora preciso de uma resolução de 100 ms de tempo, mas tenho um tal impulso agora e não sei do que vou precisar amanhã. Não gostaria de ter um limite de bits tão elevado, 1000 ms é demasiado espesso. Milissegundos é o padrão. Se alguém tolamente transbordar a fila - é a sua tragédia (há sempre muitas formas muito acessíveis de fazer cair o programa também com o terminal).

 

Já não é possível ir a milissegundos.

Quantos EAsescritos irão começar a gerar 1000 vezes mais eventos temporais do que o autor pretendia?