[c] executar um while durante 321 miliseconds

como assim? queres apenas parar o programa durante esse tempo?
para isso basta sleep(321), não há necessidade de usar um while

agora se queres executar código durante o while mas parando após esse tempo já e mais complicado, nem sei se dá. talvez se fores contando o tempo após cada instrução, mas não sei como fazer isso
 
Hello,

Há pouco tempo fiz algo parecido em C#.

Não sei se o C tem classes parecidas com as que vou usar mas vou presumir que sim:

DateTime.Now - Guarda o valor da data e hora instantâneas.
TimeSpan - Classe para tratar diferença entre datas.

Se eu fizer qq coisa do Género:

Código:
DateTime inicio = DateTime.Now;
DateTime agora = DateTime.Now;
TimeSpan diferenca = agora.Subtract(inicio);
 
While (diferenca.Milliseconds < 321)
{
código....
.............
agora = DateTime.Now;
diferenca = agora.Subtract(inicio);
}

isto resulta em CSharp;
Ter em atenção que a precisão não é ideal. Mais uma vez, em Csharp, queria que ele me parasse aos 999 milisegundos (diferenca.Miliseconds == 999) e tive de me contentar com (diferenca.Miliseconds > 950)

Espero que tenha ajudado alguma coisa
 
Se queres executar algo dentro do ciclo com esse limite de tempo, tens de registar um signal handler para SIGALARM e marcar um alarm() para esse tempo, interrompendo assim o ciclo.

Assim não necessitas de fazer espera activa (verificar se já passou o tempo) poupando preciosos ciclos de CPU.

P.S.: Isto só funciona em UNIX e como deve ser óbvio, em sistemas com timers com mais resolução do que 312 ms... (sim, alguns não têm muito mais...)
 
Se queres executar algo dentro do ciclo com esse limite de tempo, tens de registar um signal handler para SIGALARM e marcar um alarm() para esse tempo, interrompendo assim o ciclo.

Assim não necessitas de fazer espera activa (verificar se já passou o tempo) poupando preciosos ciclos de CPU.

P.S.: Isto só funciona em UNIX e como deve ser óbvio, em sistemas com timers com mais resolução do que 312 ms... (sim, alguns não têm muito mais...)

era mais o minimo de tempo que aquele conjunto de instruções iria ficar á espera de reber algo (ex. um semaforo, um socket). O utilizador andre já concebeu bem algoritmo. so que ele está a usar funcoes c# e eu quero em c
 
Back
Topo