Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zużycie zasobów procesora przez aplikację

Ostatnio zmodyfikowano 2010-07-20 19:23
Autor Wiadomość
kamillo121
Temat założony przez niniejszego użytkownika
Zużycie zasobów procesora przez aplikację
» 2010-07-04 23:53:36
Witam, może to się wyda dla Was śmieszne i ten temat może nie mieć racji bytu z waszego punktu widzenia ale dręczy mnie pewna sprawa. Gdy piszemy jakaś aplikację, działa ona w pętli, "goła pętla":
C/C++
while( !bQuit )
{
   
}

zużywa bardzo dużo zasobów procesora, jak i nie całe.
Po małej edycji naszej pętli otrzymujemy taki szablon:

C/C++
while( !bQuit )
{
    Timer->checkTime(); // if(sDelta=GetTicks()-iLastTime <INTERVAL)
    //  delay(INTERVAL-sDelta);
    //  iLastTime=GetTicks();
}
Mniej więcej takim sposobem otrzymujemy zużycie procesora na niskim poziomie przy czym INTERVAL ma wartość powiedzmy 20...
Gdybyśmy teraz dodali renderowanie przed checkTimer(); za każdym obiegiem, znów zużycie wzrosło by na mniej więcej 30 %(Oczywiście te dane są w miarę poglądowe chcę tylko lepiej wytłumaczyć o co mi chodzi).

jeżeli zastosujemy jakiś "system" cache który będzie renderował scenę tylko w tedy gdy zajdzie jakieś zdarzenie powiedzmy sobie wtedy gdy użytkownik coś kliknie/zepsuje bądź algorytm wyliczy coś co będzie wymagało zmiany pozycji jakiegoś elementu graficznego to zużycie będzie dość spoko, zależności od zdarzeń, przy niezbyt częstych zdarzeniach będzie to w granicach 5%,6% przy większej częstotliwości większe jeszcze zależy od ilości renderowanych elementów...
No oki samo renderowanie a np odtwarzacz muzyki nie mógłby sobie pozwolić na opóźnienie wynoszące INTERVAL bo przecież muzykę by zacinało tak samo z filmami i innymi tego typu bajerami.
A więc moje pytanie czy jest jakiś sposób właśnie na ograniczenie zużycia procesora prawie do zera bez "zatrzymywania" pętli INTERVAL-sDelta gdy sDelta<INTERVAL, może macie jakieś ciekawe artykuły na ten temat  ?  programy działające w tle nie zużywają zasobów procesora w takim stopniu żeby wskaźnik wskazywał 20% 50% 100% a nawet 10%
(przepraszam za tak długi wątek)

//edit
Przy ostatniej gierce Arkanoid właśnie robiłem to takim jakby systemem cache, dzięki czemu generowało małe zużycie ale wciąż w razie większych projektów to zbyt mała dokładność opóźniająca program o 20milisekund
P-19476
DejaVu
» 2010-07-05 00:05:12
Usypiaj aplikację na 1ms w każdym przebiegu pętli.

/edit:
Ale Sleep nie gwarantuje, że uśpisz proces na 1ms przy losowych zdarzeniach może być to nawet 20ms :) Generalnie w grach czasu rzeczywistego nie stosuje się Sleepów itp.

/edit2:
Co do programów działającyh w tle: poczytaj o WinAPI, i o blokującej obsłudze komunikatów.
P-19478
kamillo121
Temat założony przez niniejszego użytkownika
» 2010-07-05 00:08:47
No tak, ale to można kontrolować z poziomu naszej aplikacji i "dostrajać" timery według tego sleep'a jedno-milisekundowego, ale skoro się nie wykorzystuję takich rzeczy  to czemu takie aplikację nie zużywają całych zasobów ?
P-19479
DejaVu
» 2010-07-05 00:10:31
Poczytaj kurs WinAPI i wszystko stanie się jasne. Za długo by tłumaczyć - mam lepsze zajęcia :)

/edit:
Pod lupę możesz wziąć WM_TIMER'a, ale nie daję żadnej gwarancji że zadziała lepiej niż Sleep.
P-19480
kamillo121
Temat założony przez niniejszego użytkownika
» 2010-07-05 00:12:12
No okey, dzięki za szybką odpowiedź, co do WinApi, już kiedyś czytałem dość sporo o tym i jakość nic o tym nie było mowy(aczkolwiek aplikacje fakt nie zjadały zasobów), ale teraz wiem czego szukać :)
Jeszcze raz dzięki
P-19481
kamillo121
Temat założony przez niniejszego użytkownika
» 2010-07-19 13:29:37
Witam ponownie, ciągle szukam i nie mogę tego nigdzie znaleźć(a bez ego ani rusz), nic o tym nie ma, jakby ktoś miał chęci mi pomóc to bardzo proszę jeżeli nie to trudno :)
Przypomnę, że chodzi mi o gry typu rzeczywistego a nie o programy oparte na zdarzeniach

//edit jak nikt nic nie napiszę przez dłuższy czas to zamknę temat :)
P-19983
DejaVu
» 2010-07-19 19:57:11
W grach czasu rzeczywistego nie używa się sleepów itp.
P-19995
kamillo121
Temat założony przez niniejszego użytkownika
» 2010-07-19 20:34:54
no okey ale jak to robią, że gra nie zużywa 100% zasobów procesora ?
testowałem ostatnio wiele gier, instalowałem specjalnie żeby spoglądać na zużycie procesora i nie zużywają 100% jakby nie patrzeć, zużywają czasem większość zasobów ale nie 100% i to przez cały czas
P-19996
« 1 » 2
  Strona 1 z 2 Następna strona