我在一个定时器里开一个线程,不停检查listbox上是否有数据,
如果有的话就交给线程去处理:
procedure TForm1.Timer1Timer(Sender: TObject);
var
t1:Thread;
begin
if listbox1.items.Count>0 then
begin
 t1:=Thread.Create(Threadstart(MyThreadProc));
 t1.Start;//线程开始
end;  
 
procedure MyThreadProc();
begin
//线程处理数据
end;现在有个疑问:定时器里一直Thread.Create会不会造成资源浪费?
另外每次create那不是会建立n个线程吗?那不是没达到我的目的,
我是要检查到有数据就交给一个线程去处理,该线程就是专门来
处理数据用的

解决方案 »

  1.   

    楼主不如就建立一个线程,用那个线程来if listbox1.items.Count>0 then .............
      

  2.   

    同意楼上所说的。另外,如果对数据的处理实时性要求不高的话,那就可以不需要线程,直接在Timer的定时事件中处理就是了。
      

  3.   

    直接在OnTimer里写就好了...
    Timer.Enabled:=False;
    //执行你检查的代码
    Timer.Enabled:=True;
      

  4.   

    创建线程是有数目限制的。好像是几千我忘了,你作个demo测测就知道了。多了就抱错了。同意楼上,你有了线程干吗还要用timer呀?线程弄成循环,sleep一个timer时间不就好了。
      

  5.   

    有了线程干吗还要用timer呀?
      

  6.   

    好象没有问题的,线程执行完毕之后会自动terminate的。
    如果你选择了某个选项
    忘了,,,呵呵,楼下的来说吧
    楼上说得对,没有必要用线程,有timer就可以了
      

  7.   

    根据你的代码
    1、timer触发一次只create一次
    2、每次也只创建一个线程
    你的方法没有错啊,线程执行完毕之后会自动terminate的。
    不过最好你做个判断,在上个线程执行完前不要执行下一个。否则你就要对线程进行同步处理
      

  8.   

    就是,用了线程就不要用timer了,可以在线程内做个死循环,在里面sleep