全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1974
推到 Plurk!
推到 Facebook!

如何降低程序运行的优先级

答題得分者是:aftcast
leonli80
一般會員


發表:29
回覆:27
積分:11
註冊:2006-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-12-28 20:44:59 IP:180.154.xxx.xxx 訂閱
我在做一个双萤幕的程式。第一个显示屏跑A程式(收款),第二个显示屏显示B程式(播放图片幻灯片)。

两个程式各自独立。
现在发现B程式在幻灯片切换的时候,瞬间占用CPU资源过大,导致我A程式在操作的时候会用卡住的感觉。
请教如何能设置将B程式级别调低,优先运行A程式,先谢谢各位了。

下面是B程式播放幻灯的部分代码,主要就是这段代码导致A程序的界面卡顿。

[code delphi]
begin
X0:=Bitmap1.Width div 2;
Y0:=Bitmap1.Height div 2;
for i := 0 to Global.SlideStep do
begin
MidX := Round(RatioX*I*0.5);
MidY := Round(RatioY*I*0.5);
BitBlt(Image1.Canvas.Handle, X0-MidX, Y0-MidY, Round(RatioX*I),Round(RatioY*I),
Bitmap1.Canvas.Handle, X0-MidX, Y0-MidY, Rop);
Image1.Repaint;
end;
end;
[/code]

aftcast
站務副站長


發表:81
回覆:1483
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-12-30 02:37:48 IP:114.36.xxx.xxx 訂閱
試repaint後加Sleep(10)
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
leonli80
一般會員


發表:29
回覆:27
積分:11
註冊:2006-08-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-01-01 22:10:43 IP:124.78.xxx.xxx 訂閱

===================引 用 aftcast 文 章===================
試repaint後加Sleep(10)

sftcast:

您好,加了Sleep以后果然有了效果,CPU占用率会降下来一些,明天我再把程式拿到客户的电脑上去跑一下看看。谢谢啦!

另外,我又加了一些东西,请帮我看一下对我的程式有没有效果。

1、使用Setpriorityclass(GetCurrentProcess(), IDLE_PRIORITY_CLASS); 把优先级降低
2、在FormCreate 时设置 DoubleBuffered := true;
3、
procedure Tfr_main.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result := 1;
end;
pcplayer99
尊榮會員


發表:142
回覆:740
積分:591
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-10-10 12:39:51 IP:120.236.xxx.xxx 訂閱
1. 看不懂你的代码,不知道为什么显示一个图,要跑一个多次的循环?

2. 就算要跑循环,Repaint 也不应该放在循环内。循环跑完后 Repaint 一次就可以了。

3. 如果循环的运算量很大,需要降低它瞬间对 CPU 的占用,循环内增加一个 Sleep(10),让循环每一圈都停一下,是个很好的办法。
系統時間:2018-01-21 13:05:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!