Teste de informatică pentru liceu, articole C#, C/C++, PHP
Uneori este nevoie ca într-o aplicaţie să furnizăm o întârziere în efectuarea unei anumite operaţii pentru o scrută perioadă de timp. Să ne imaginăm de exemplu că avem o aplicaţie interactivă cum ar fi un joc de şah. Dacă după mutarea jucătorului uman urmează instantaneu mutarea calculatorului, ochiul uman ar putea fi derutat de viteza de execuţie. Este adevărat, dacă este vorba de şah, atunci algoritmul pentru mutarea calculatorului poate să dureze o perioadă destul de lungă, ceea ce ar face inutilă prezenţa unei întârzieri suplimentare!
Sunt multe alte exemple care ilustrează motivul pentru care e necesară aplicarea unei amânări în efectuarea unei operaţii. O funcţie simplă care face acest lucru este următoarea:
void Delay(int milisec)
{
int timp = Environment.TickCount;
while (true)
if (Environment.TickCount - timp >= milisec) return;
}
Apelul unei astfel de funcţii (metodă privată a unei clase) se face prin:
Delay(2000);
Întârzierea este de 2 secunde, adică 2000 milisecunde.
Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică
Ciprian Khlud aka Mustiata 13-9-2012 13:40:19
Desi functia se poate implementa cu o functie echivalenta:
Thread.Sleep(2000);
recomand calduros ca cel putin in bucla principala:
while(true)
{
Thread.Sleep(1); //1 milisecunda
if(Envirnment.TickCount - timp >= milisec) return;
}
Diferenta e ca un calculator va calcula diferenta de timp aproximativ o data pe milisecunda, deci 1000 ori pe secunda, nu de cate ori poate procesorul.
De asemenea, desi deoarece doar Environment.TickCount se schimba in bucla, este bine sa se calculeze in afara buclei (ceea ce face ca si conditia sa fie mai simpla si eventual pusa in while).
void Delay(int milisec)
{
int timp = Environment.TickCount;
int finishTime = timp +milisec;
while (Environment.TickCount < finishTime)
Thread.Sleep(1);
}