|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Kjirbis
Joined: 22 May 2005 Posts: 20 Location: Liepaja
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
Kjirbis
Joined: 22 May 2005 Posts: 20 Location: Liepaja
|
Posted: 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 |
|
|
DeRatizators
Joined: 27 Apr 2006 Posts: 492
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon May 29, 2006 11:29 pm Post subject: |
|
ah to int main(). Nu jā skaidrs. Tas dosā noteikti ies :) |
|
Back to top |
|
|
Kjirbis
Joined: 22 May 2005 Posts: 20 Location: Liepaja
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
DeRatizators
Joined: 27 Apr 2006 Posts: 492
|
Posted: 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.. ",
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 |
|
|
Delfins
Joined: 20 Jan 2003 Posts: 60 Location: Riga
|
Posted: 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 |
|
|
Kjirbis
Joined: 22 May 2005 Posts: 20 Location: Liepaja
|
Posted: 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 |
|
|
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
DeRatizators
Joined: 27 Apr 2006 Posts: 492
|
Posted: 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 |
|
|
Delfins
Joined: 20 Jan 2003 Posts: 60 Location: Riga
|
Posted: 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 |
|
|
|
|
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
|