dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Idle loops ļoti noslogo CPU.

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
Kjirbis



Joined: 22 May 2005
Posts: 20
Location: Liepaja

PostPosted: Mon May 29, 2006 11:16 pm    Post subject: Idle loops ļoti noslogo CPU.

Vai tas ir normāli, ka loops, kurā gandrīz nekas netiek darīts, pamatīgi noslogo CPU, gandrīz pie 100% ?

Lūk, piemēri:
Code:

int main()
{
   while (1);
}


vai

Code:

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   MSG msg;

   PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);

   while (msg.message != WM_QUIT) {
      if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
        TranslateMessage(&msg);
       DispatchMessage(&msg);
      }
     else {
         
      }
   }
   
   return 0;
}



Es lietoju mingw gcc. Ja to main() piemēru nokompilēju dosā ar djgpp, rezultāts tas pats. Noteikti kāda sistēmas-specifiska problēma.
Lietoju WinXP pro.
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon May 29, 2006 11:19 pm    Post subject:

Jā tas ir normāli. Jo vienkārši procesors tavu idle loopu izpilda cik vien ātri iespējams neskatoties uz to, ka tu tur nekā nedari.
Ja tava spēle nav nekāda ļoti real-time, tad tu vari eventus nevis Peekot, bet gaidīt, tb procesors neizpildīs tavas programmas kodu, kamēr nepienāks kāds events (peles kustība, klaviatūras pogas nospiediens, un tml). To var panākt ar WaitMessage funkciju WinAPĪ.

dosā tu ar djgpp vari nokompilēt Win progas.. hm.. tas ir jaunums man. Es biju domājis, ka ar djgpp (kas pēc būtības ir GCC ports priekš DOS) var kompilēt tikai DOS programmas. Win videi ir MinGW (pēc būtības tas pats GCC, tikai priekš Wina).
Back to top
View user's profile Send e-mail
Kjirbis



Joined: 22 May 2005
Posts: 20
Location: Liepaja

PostPosted: Mon May 29, 2006 11:25 pm    Post subject:

Skaidrs.

Quote:
Ja to main() piemēru nokompilēju dosā ar djgpp, rezultāts tas pats.


main() piemēru! Tas jau standarts, kas kompilēsies ne tikai windowsā/dos/linuxā...


Last edited by Kjirbis on Mon May 29, 2006 11:26 pm; edited 1 time in total
Back to top
View user's profile Visit poster's website
DeRatizators



Joined: 27 Apr 2006
Posts: 492

PostPosted: Mon May 29, 2006 11:25 pm    Post subject:

>>>Vai tas ir normāli, ka loops, kurā gandrīz nekas netiek darīts, pamatīgi noslogo CPU, gandrīz pie 100% ?

Lūk, piemēri:
Code:

int main()
{
while (1);
}


:shock:
OMG

Sāc nevis ar mesiģiem, bet ar "Pēci beisikānu"
_________________
Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor.
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon May 29, 2006 11:29 pm    Post subject:

ah to int main(). Nu jā skaidrs. Tas dosā noteikti ies :)
Back to top
View user's profile Send e-mail
Kjirbis



Joined: 22 May 2005
Posts: 20
Location: Liepaja

PostPosted: Mon May 29, 2006 11:34 pm    Post subject:

DeRatizators wrote:

Sāc nevis ar mesiģiem, bet ar "Pēci beisikānu"


Deratizators, tev laikam viena while(1) statementa dēļ patīk raxtīt garu kodu. Labi, te tev būs:

Code:

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   while (1);
}
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon May 29, 2006 11:37 pm    Post subject:

Ar MinGW kompilējot btw var arī parasto int main(..) lietot WinMain vietā.
Back to top
View user's profile Send e-mail
DeRatizators



Joined: 27 Apr 2006
Posts: 492

PostPosted: Tue May 30, 2006 8:38 am    Post subject:

Kjirbis wrote:
DeRatizators wrote:

Sāc nevis ar mesiģiem, bet ar "Pēci beisikānu"


Deratizators, tev laikam viena while(1) statementa dēļ patīk raxtīt garu kodu. Labi, te tev būs:

Code:

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   while (1);
}


Garumam nav nozīmes...

Mani izbrīna fakts, ka cilvēks, kurš raksta savu engine, pilnā nopietnībā brīnās, ka "while (1);" iekš main() un t.m.l. noslogo kompi. "Tas kods taču neko nedara.. ", Very Happy Very Happy Very Happy
Kārtējais meistars, kuram vispār nav nekādu informātikas pamatu !

edit:peedinjas
_________________
Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor.


Last edited by DeRatizators on Tue May 30, 2006 9:04 am; edited 1 time in total
Back to top
View user's profile
Delfins



Joined: 20 Jan 2003
Posts: 60
Location: Riga

PostPosted: Tue May 30, 2006 8:47 am    Post subject:

Kā tad neko nedara? Dara gan... lūpo... A lūpošana ir pārs proča operācijas..
_________________
.... ....... _ o
... ... .. _\ \>
.... ....(_)/(_)
Back to top
View user's profile Send e-mail Visit poster's website
Kjirbis



Joined: 22 May 2005
Posts: 20
Location: Liepaja

PostPosted: Tue May 30, 2006 12:46 pm    Post subject:

DeRatizators, garumam ir gan nozīme! int main() es varu ātrāk uzdrukāt nekā int WinMain()... Nujā, tā ir taisnība, informātiku tā speciāli es neesmu mācījies. Droši vien tāpēc es neko daudz vēl neesmu sasniedzis.

Vnk es biju iedomājies, ka lūpošana procesoram ir vieglāk izpildāma, nekā citas instrukcijas. Skatījos Task Manager procesu listē un satraucos, ka lielākā daļa procesu aizņem ap 0%, bet mana proga Alt+Tabbota, pie 90..100%. Mhm, tie procesi jau tikai sēž un gaida eventus.
Back to top
View user's profile Visit poster's website
Vecais_Dumais_Laacis
Guru
Guru


Joined: 29 Jan 2004
Posts: 800

PostPosted: Tue May 30, 2006 12:48 pm    Post subject:

Code:
int main()
{
   while (1) Sleep(1);
}


vai nixa gadiijumaa buutu usleep(1000);


while(1); bez sleepa protams radiis 100% cpu noslodzi un paarejos threadus (ja taadi ir) bremzees.
_________________
...un ja bites buutu laachi...
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue May 30, 2006 12:49 pm    Post subject:

Nepareizi tu domā, ka tie sēž un gaida eventus. Tev jau kodā ir PeekMessage izsaukums. Vai tad tu nezini, ko tas dara? Tas negaida nekādus eventus, tas uzreiž atgriežas. Par while(1) vispār nerunājot.. tur jau nekādu eventu nav.
Back to top
View user's profile Send e-mail
DeRatizators



Joined: 27 Apr 2006
Posts: 492

PostPosted: Tue May 30, 2006 12:55 pm    Post subject:

Kjirbis wrote:
DeRatizators, garumam ir gan nozīme! int main() es varu ātrāk uzdrukāt nekā int WinMain()... Nujā, tā ir taisnība, informātiku tā speciāli es neesmu mācījies. Droši vien tāpēc es neko daudz vēl neesmu sasniedzis.

Vnk es biju iedomājies, ka lūpošana procesoram ir vieglāk izpildāma, nekā citas instrukcijas. Skatījos Task Manager procesu listē un satraucos, ka lielākā daļa procesu aizņem ap 0%, bet mana proga Alt+Tabbota, pie 90..100%. Mhm, tie procesi jau tikai sēž un gaida eventus.



Jā, vienkāršāk izpildāma, tikai tavā gadījumā tā vienkāršā instrukcija tiek izpildīta nedefinētu skaitu reižu un cik vien bieži operētājsistēma un processors to ļauj, nedodot izpildīt neko citu...
_________________
Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor.
Back to top
View user's profile
Delfins



Joined: 20 Jan 2003
Posts: 60
Location: Riga

PostPosted: Wed May 31, 2006 12:00 pm    Post subject:

Imho skaties standarta piemērus ar šādu msg-loop-u.. tur nekas nekarās..
_________________
.... ....... _ o
... ... .. _\ \>
.... ....(_)/(_)
Back to top
View user's profile Send e-mail Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group