关于线程占用cpu100%的问题

linkyou 2005-02-22 04:06:22
我建立了一个最简单的例子想了解线程的运行情况,发现结果cpu占用为100%,请问为什么,我的例子是新建立一个form1在上边有个按扭button1,然后建立一个线程test,
在它的excute里边写上如下代码
while not Terminated do
begin
ListenRt1; // Synchronize(
end;
listenrt1 为自定义的空的函数。
在form1的button的click事件里边写上代码(test为我新建的那个线程)
rt1 := test.Create(False);
当我点击按纽以后,cpu的占用率为100%,那是不是表明如果建立一个与时间同步的线程,譬如监听线程,是不是cpu都要占用100%?请高手解释一下,如果我不希望是100%,该如何去做。
...全文
278 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2005-02-24
  • 打赏
  • 举报
回复
根据需要,Sleep一定的时间
不要使Sleep(0),但每次都Sleep也不行,程序会失去很多工作时间的,所以要根据应用来定的

http://lysoft.7u7.net
linkyou 2005-02-24
  • 打赏
  • 举报
回复
说的清楚一点,我做的是录音盒程序,开辟了多个线程监控电话录音情况
adrom 2005-02-23
  • 打赏
  • 举报
回复
这两个方法行不行(粗略):
1.开辟一个请求缓冲区,请求源把它的每一个请求放于缓冲区内,服务进程周期性地查询缓冲区中的请求,有则处理之,然后sleep(SLEETTIME),睡民时间根据请求频率而定。
2.开辟一个请求缓冲区,请求源一旦有请求,首先把请放于缓冲区,然后发送一个消息给服务进程(类似于中断)。如果请求的信号信息不大,则可以存储于消息的存储空间中,从而不用另外开辟缓冲区缓存请求。
aus 2005-02-23
  • 打赏
  • 举报
回复
学习。。。

不过不管是在线程还是其他的运行代码中
弄个死循环一定要在循环中把控制权让给其他进程或线程一下吧
liuzhu 2005-02-23
  • 打赏
  • 举报
回复
还有一个好处是,可以为系统中的多个线程(如果需要的话)统一设计驱动信号源,便于管理和提高效率。
liuzhu 2005-02-23
  • 打赏
  • 举报
回复
1、根据硬件特点取最佳查询(监听)周期;
2、利用多媒体定时器或其他手段产生脉冲事情;
3、线程中的主程序采用该脉冲时间驱动。
(ps. 如果硬件本身能提供驱动信号就更好了。)

这样做的好处是充分利用了WaitForSingleObject函数的占用CPU时间少的特点。
adrom 2005-02-23
  • 打赏
  • 举报
回复
监听一般是来自网络的请求吧?这样的话通过调用底层的API如Socket,这样既不会错过请求,又能不过度占用CPU,不知道对不对?
catfox 2005-02-23
  • 打赏
  • 举报
回复
试试用Sleep(1)
catfox 2005-02-23
  • 打赏
  • 举报
回复
sleep就是让当前线程暂时让出cpu的控制权
linkyou 2005-02-23
  • 打赏
  • 举报
回复
sleep(0)根本没有作用!
linkyou 2005-02-23
  • 打赏
  • 举报
回复
请给出完整解释
linkyou 2005-02-23
  • 打赏
  • 举报
回复
???????
kuki84 2005-02-22
  • 打赏
  • 举报
回复
加sleep起的什么作用?
何鲁青 2005-02-22
  • 打赏
  • 举报
回复
呵呵,sleep(0)
我不懂电脑 2005-02-22
  • 打赏
  • 举报
回复
确实就是加Sleep解决问题。
SeaWave 2005-02-22
  • 打赏
  • 举报
回复
加一个Sleep(0)即可,老问题了。

while not Terminated do
begin
ListenRt1;
Sleep(0);
end;
linkyou 2005-02-22
  • 打赏
  • 举报
回复
有用吗,会不会导致监听遗漏
exu 2005-02-22
  • 打赏
  • 举报
回复
sleep(1)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧