Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
AhmedHan
![](modules/Forums/images/avatars/galeri02/008.gif)
Kayıt: Jun 01, 2005 Mesajlar: 7
|
Tarih: Tue Sep 27, 2005 2:01 pm Mesaj konusu: %100 CPU Kullanimi |
|
|
OpenGL ile yazdigim programlar, cok basit olsalar dahi (havada donup duran bi kup gbi), cok asiri CPU gucu harciyorlar. Bu kullanim nasil azaltilabilir?
Win32 API'lerinden SetTimer() fonksiyonu ile timer kullanimi cozum olabilir mi? |
|
Başa dön |
|
![](themes/DeepBlue/forums/images/spacer.gif) |
devreci
![](modules/Forums/images/avatars/galeri01/075.gif)
Kayıt: Mar 04, 2005 Mesajlar: 256
|
Tarih: Tue Sep 27, 2005 4:11 pm Mesaj konusu: |
|
|
mesaj döngüsünde Getmessage kullanmalısın.
settimer ile zamanı şettirmeyi unutma |
|
Başa dön |
|
![](themes/DeepBlue/forums/images/spacer.gif) |
mentat
![](modules/Forums/images/avatars/galeri07/558.gif)
Kayıt: Oct 15, 2002 Mesajlar: 528
|
Tarih: Tue Sep 27, 2005 5:32 pm Mesaj konusu: |
|
|
bu dert GLUT gibi kütüphanelerde de var olan bir dert. win32 ile atlatmanın yolları var (devreci söylemiş sanırım). SDL ya da wxWidgets gibi GUI (grafik arabirim) kütüphanelerini kullanmanı tavsiye ederim. binlerce insan tarafından test edilmiş ve açık kodlu projeler her ikisi de. zamandan kazanır, böyle işlerle de başını ağrıtmazsın..
bir de ekleme yapayım. şu anda küp döndürmek, basit işler yapmakla meşgul olsan da tahminim amacın oyun yapmak. oyun için sana değil %100 mümkünse %200 işlemci yetmez (sen derken, her oyun için aynı şey) proje büyüdükçe. vahşi bir şekilde oyununun yanında çalışmaya uğraşan diğer programları ezmeye onlara cpu'dan cycle koklatmamaya çalışmak lazım. yani ileride bu dert ortadan (kısmen) kalkacak çalışmalarında. yani çok dert etmeyebilirsin. ama fullscreen olmayan, vs bir oyun yapmayı düşünüyorsan bu dediklerim geçerli değil.. |
|
Başa dön |
|
![](themes/DeepBlue/forums/images/spacer.gif) |
Ragnor
![](modules/Forums/images/avatars/galeri06/493.gif)
Kayıt: Jan 26, 2003 Mesajlar: 218 Nereden: Bursa
|
Tarih: Tue Sep 27, 2005 6:26 pm Mesaj konusu: |
|
|
Ya tam ekran çalışacak ve o sırada bilgisayardaki bütün ilgili alacak bir oyunsa cpu'nun %100 çalışması normal ve bırak öyle kalsın ama basit bir masaüstü oyunu yapacaksan yani milletin bir yandan müzik dinleyip, chat yapıp, web'te surf yaptığı bir yandan da oynadığı bir oyun yapacaksan; öyle kalmasın daha iyi olur. Tabii bunları Mentat'da söylemiş ama olsun tekrardan zarar gelmez .
Cpu'nun %100 kullanımı genelde event handling yani olay yönetimi ile ilgili oluyor. Mentat'ın da dediği gibi GLUT oldukça basit ve bu konuda hiç şansın yok ama Win32api, SDL veya WxWidgets gibi nispeten daha gelişmiş olanlarda bunun için uygun bir yöntem bulunmakta (umarım ).
SDL ile nasıl yapıldığını biliyorum, kısaca SDL_PollEvent fonksiyonu kullanılmamalı. Bu fonksiyon herhangi bir olay olmasa da hiçbir şey olmuyor mesajı döndürdüğü için cpu'yu meşgul tutuyor. Bunun yerine SDL_WaitEvent fonksiyonu ile sadece istediğiniz olayların yaşanmasını beklersiniz bu sayede cpu'ya gereksiz yük binmez.
Diğer API'lerde de durum aynı ama onlarla bunu nasıl yaparsın bilmiyorum. Bilenler açıklarsa öğreniriz değil mi? Klavye başına beyler . |
|
Başa dön |
|
![](themes/DeepBlue/forums/images/spacer.gif) |
MD-C
![](modules/Forums/images/avatars/galeri02/078.gif)
Kayıt: Feb 26, 2003 Mesajlar: 1258 Nereden: Dünya.Türkiye(54)
|
Tarih: Tue Sep 27, 2005 7:42 pm Mesaj konusu: |
|
|
Bu soruyu bir kere daha cevaplamıştım: GetMessage() yada PeekMessage()'de hWnd, kısmına NULL gönder! |
|
Başa dön |
|
![](themes/DeepBlue/forums/images/spacer.gif) |
AhmedHan
![](modules/Forums/images/avatars/galeri02/008.gif)
Kayıt: Jun 01, 2005 Mesajlar: 7
|
Tarih: Wed Sep 28, 2005 3:12 pm Mesaj konusu: |
|
|
Ayni sorun Visual Basic'te de vardi. do-loop donguleri falan cok CPU harciyordu. Yine bi forumda bana DoEvents diye bi fonksiyon tavsiye etmisti birisi. Gercekten de cok ise yaramisti.
Bu bakimdan SDL_WaitEvent fikri hosuma gitti. Bu aksam MSDN'i biraz arastiracagim. |
|
Başa dön |
|
![](themes/DeepBlue/forums/images/spacer.gif) |
|