theforbidden1
21-05-2008, 17:54
Ola,
Eu queria executar um ciclo while durante pelo menos 321 miliseconds, como posso fazer isso?
Eu queria executar um ciclo while durante pelo menos 321 miliseconds, como posso fazer isso?
|
View Full Version : [c] executar um while durante 321 miliseconds theforbidden1 21-05-2008, 17:54 Ola, Eu queria executar um ciclo while durante pelo menos 321 miliseconds, como posso fazer isso? MPalhas 21-05-2008, 17:58 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 andrepadez 21-05-2008, 18:14 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: 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 The_True_Eue 21-05-2008, 19:01 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...) theforbidden1 22-05-2008, 13:44 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 |