cpu reduce (cpu kullanımını düşürmek) nasıl..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

cpu reduce (cpu kullanımını düşürmek) nasıl..

Mesaj gönderen Shou »

64 bit sistemlerde sorun veriyormuş bir döküman buldum vede aşagıda payşalıyorum yardımcı olursanız sevinirim.

ultima clientlerinin kasmasının tek sebebi client çalıştığında peekmessage apisini çalışması ve bu apinin çalıştığı sürece windows mesajlarını kontrol etmesinden kaynaklanır. tabi binlerce message geldiginden api'nin onları işlemesi cpu'nun canına okur.

Kod: Tümünü seç

peekmessage apisinin user32.dll deki tam karşılığı = function PeekMessage(var lpMsg: TMsg; hWnd: HWND;
   wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; stdcall;
 ********************************************************************************************************
 apiye hook atmak için nette bi ton döküman bulabilirsiniz. ben size kısa örnek vericek gerisi sizin becerinize kalmış..

 hook atılacak api oncelikle (değişken) olarak tanımlanır...

 ************
 var
 peekmessagehook : function (var lpMsg: TMsg; hWnd: HWND;
   wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; stdcall;
 ************

 sonra peek message client tarafından çağrıldıgında işlenecek kod bloğu yazılır...

 **************
 function PeekMessageproc(var lpMsg: TMsg; hWnd: HWND;
   wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; stdcall;
 begin
 sleep(5); //sleep 5 yada 10 değeri yeterlidir. fazlası clienti dondurur !!!
 result:=peekmessagehook(lpmsg,hwnd,wMsgFilterMin,wMsgFilterMax,wRemoveMsg); //burada ise clientteki peekmessage'nin işlemesine devam et dedik. bunu demesek client hata verecektir. 
 **************

 geriye kaldı apimizi hooklamaya nette bi ton kod vardır ben sadece kullanımı aktarıcam...

 *******************
 apihook('user32.dll','PeekMessageA',@peekmessagehook,@peekmessageproc);
 *******************

 PeekMessageA - peekmessage apisi peekmessagea diye geçmektedir user32.dll de ve peekmessagew apiside vardır buda unicode karakterlerde kullanılır.
Bunu nasıl yaparım birisi yardımcı olursa çok sevinirim.
Cevapla