关于多线程和Timer的问题(100分)

  • 主题发起人 firstrose
  • 开始时间
如果你的子线程没有对UI直接操作的话,建议不要用TTimer,因为计时器是一个TComponent,要创建窗体(隐藏的)。
直接用SDK的WaitableTimer就可以实现定时触发了。
至于你的CPU占用率80%,应该不是TTimer的原因,但是没看到你的代码,不能确定。
 
in thread use waitevent
in main thread use setevent.
 
to 特尔斐:我说了,代码体运行一次就结束了,怎么Suspend?你那是对于有while的代码的
to lzwcd:代码就在上面,请看上面的帖子。
to IITiger:how to use them? where're them? I can't find there descriptions
in delphi's help,even in win32.hlp from delphi5!
 
在timerclick中
加入application.processmessages;
试验一下
 
老大,你看了程序没?我知道这个把戏。
 
HEevent = CreateEvent(nil,false,false,nil)
SetEvent(Hevent)
if WaitForObject_0 = WaitForSingleObject(Hevent,130000) then

...Successed
else
failed
...
>>但为节省资源,我的线程里没有while,resume一次就结束了。
>>下次执行用resume就不对了吧?
?? 线程占资源吗?主要是工作的内容才占资源吧
 
同意楼上的
 
itren:
如果用while,就是轮询。以1秒为例,等于是1秒的时间全部工作,但用timer的话,
1秒触发25次,每次执行时间在不超过40毫秒时,假定为30毫秒,工作时间就是750毫秒。
难道750毫秒不比1秒少吗?????
所以省资源!另外你实验一下就知道,用while的cpu占用率为100%,而timer就七,八
十。
希望你在发言前先把问题弄清楚。
 
没错,用While not Terminated 时CPU的占用率就是100%,我用了很多方法都不行,请各位指点。
 
轮询当然是100%了。退出条件不满足就是死循环嘛。
 
用Timer定时创建线程,创建后立即执行,线程执行完自动释放(FreeOnTerminate := True)可以吗?
 
这也有与这相关的问题,大家帮忙看看吧。
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=2012202
 
那还要加上创建/销毁线程的开销呢。LevinPeng你的问题与此没有关系的。
另外,程序可以下载了。
 
我看看先,线程方面我很有经验。
 
可能是你的线程的运行过程处理超过了40秒,而Timer控件在40秒时又让线程运行了,这样的话就相当于在线程中用了While truedo
不停的处理;
 
如果按你说的,应该是100%才对,怎么会就80%呢?
 
Timer

直接用While truedo
当然有点差别了,毕竟转了个弯。
你的Timer是怎么触发的,是重新创建线程还是RESUME
如是重新创建线程是不是要判断线程是否运行完!
 
楼主,你最好反省一下,你为什么要用线程。
即然用线程,线程中的定时激发就应该由Execute自己进行,不可能由MainForm里的Timer事件是调用Execute,这与你在主线程中直接写你在线程中执行的方法没有本质区别。CPU占用率如何不高。
要么将过程全部写到线程里,要么用thx1180的线程定时器,都是可行的方法。
有空看看http://www.delphibbs.com/delphibbs/dispq.asp?lid=2099373
 
你说的是有道理。
但讨厌的是:我需要做实时的视频数据解压,所以必须用线程,但如果用while,cpu占用
率就是100%,为了降低占用率,我就想了这么个办法。让timer定时触发一下,如果有数据就解压缩,否则就退。
不过我看netmeeting就 20%,所以我来问一下。
 
顶部