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": zużywa bardzo dużo zasobów procesora, jak i nie całe. Po małej edycji naszej pętli otrzymujemy taki szablon: while( !bQuit ) { Timer->checkTime(); }
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 |
|
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. |
|
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 ? |
|
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. |
|
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 |
|
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 :) |
|
DejaVu |
» 2010-07-19 19:57:11 W grach czasu rzeczywistego nie używa się sleepów itp. |
|
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 |
|
« 1 » 2 |