1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[c] executar um while durante 321 miliseconds

Discussão em 'Programação' iniciada por theforbidden1, 21 de Maio de 2008. (Respostas: 4; Visualizações: 1147)

  1. theforbidden1

    theforbidden1 Banido

    Ola,

    Eu queria executar um ciclo while durante pelo menos 321 miliseconds, como posso fazer isso?
     
  2. MPalhas

    MPalhas Power Member

    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
     
  3. andrepadez

    andrepadez Power Member

    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
     
  4. The_True_Eue

    The_True_Eue Power Member

    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...)
     
  5. theforbidden1

    theforbidden1 Banido

    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
     

Partilhar esta Página