如何控制线程对系统资源的占用率(100分)

  • 主题发起人 主题发起人 jonson
  • 开始时间 开始时间
J

jonson

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序建立了一个线程,在线程里用repeat until;语句执行相应程序。
我一运行这个程序,系统的资源就给程序占用了100%,我试过用procedure.priority:=tthreadpriority(int)来改变占用率,但对CPU的占用率还是100%,请问如何感低对CPU的占用率。
 
在循环里面加上sleep
 
我以前写实时行情系统的时候遇到跟你一样的问题。听课。
 
有没有其它办法啊
 
线程执行过程实际上就是APP执行过程,在一个窗体中(不含线程)使用REPEAT UNITL等同样会出现CPU占用100%情况,关键在于线程中的程序指令如何设计,一个好的程序架构是不会或很少出现100%CPU占有率,在放入线程中同样会有好的效果.推荐最好用事件机制.
 
有没有高手指点指点啊
 
用线程消息吧,看以前的帖子!
procedure MessageLoop;
var msg : TMsg;
begin
while GetMessage(msg, 0, 0, 0)do
if msg.message = WM_RECORDAVAILABLE then
begin
//do
with the message whatever you like
end else
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;

procedure TYourThread.Execute;
begin
MessageLoop;
end;
 
TO ZZHI
兄弟有没有更详细的资料啊
 
就是用事件,WaitForSingleObject,WaitForMultiObjects
 
也可以试试线程的优先级设定
 
zzhi:
我在编译时通不过 WM_RECORDAVAILABLE 这是含在那个单元的啊
labelsoft
能否说详细一点
 
同意tseug,在repeat...until循环中加一句sleep(1)即可!
 
高手,指导指啊
 
不可能的!是你的代码有问题!多线程在单CPU系统中是由时间片来模拟的,也就说,线程分配到一定长度的时间来独占CPU,过后就“挂起”,CPU处理别的事务,线程等待下一个时间片的到来来执行该线程!我也写过一个程序,在主线程中运行CPU占用100%,代码一句未改移到新建的线程中,就一切正常了!
 
masm,能否说详细一点,
我的程序只建立一个线程在运行,"代码一句未改移到新建的线程中"这是什么意思啊
 
减低优先级可以吗?
顺便提一下,如果程序中有
while(true)
begin
end;
肯定占用100%
我以前写的一个程序就占用100%,后来不得不修改
我的qq:71892967
 
补充,因为要不断得测试,cpu当然无法空闲
我的qq:71892967
 
我讲的不一定对,仅供参考!若有什么错误,希望朋友们指点!
我的QQ:71892967,喜欢钻研编程技术的朋友请加我吧?
你那个外设必须不停监测,一点间隙都不允许?可不可以隔N秒
监测一次其状态?如果可以就好办了!线程体这样写:
begin
检测一次;
处理..;
.suspended;//挂起自己,此后cpu将不再分配时间片给他!
end;
在主线程中,时钟隔一会就唤醒他,使其再运行一次.(用.resume恢复)
或者不用线程也可以的。
如果必需在线程体中不停的检测,我试了,暂时没想出办法!!
另外,我想提醒你,即使程序中写的是‘不停检测’,如实际运行时
cpu占用率很小,说明实际上你的程序并没有每时每刻在运行,也就
说明实际上不是‘不停检测’,肯定有一些时间片什么事也没做,而
且如果此‘空闲时间片’是由操作系统随意决定的,就更达不到你想要
的实时检测的效果了。(很危险,无法控制)
我认为,如
begin
检测一次状态;
根据状态处理;
...
end;
需要花费x毫秒,你完全可以t毫秒检测一次(x<t),多检测也没用!
如x很小,或者就1~n秒检测一次,也可以达到实时检测的效果吧?
还想问您一下,你那究竟是什么外设??什么板卡?
windows是分时操作系统。为什么要在win+pc上实现这种程序?究竟
用来干吗?
 
这样的话还不如直接用时钟处理.
一点也发挥不了线程的好处
 
后退
顶部