我用如下办法创建线程并使其运行
th1:=tlistThread.Create(true);//创建线程1
th1.Resume;//开始执行这个线程大概结构如下
a:=0;
while a=0 do
begin
....
s:=idhttp.get('http://xxx.xxx.xxx');//idhttp为动态创建
....
end;
这个线程是不会结束的。
不过,我发现奇怪现象,不知道过多少时间(几分钟或几十分钟吧),这个线程会被从头至尾重新执行,也就是一个线程会有几个副本同时被运行,导致结果的混乱。我就奇怪了,程序中只有一次启动了这个线程,这个线程怎么每隔一段时间就启动一个副本呢?也就是这个线程在不同的时间被同时运行多次,什么原因?程序中只在开头部分启动了一次线程,其他地方再无启动线程的地方了,郁闷!!!

解决方案 »

  1.   

    感谢楼上。不过什么样的缺陷会导致线程会自动被执行多次?是不是IDHTTP被阻塞导致?
      

  2.   

    while a=0 do
    begin
    ....
    idhttp 每次在这里新创建?
    s:=idhttp.get('http://xxx.xxx.xxx');//idhttp为动态创建
    ....
    end;
      

  3.   

    楼上的,创建IDHTTP是在循环外,每次线程只创建一次。
      

  4.   

    我实在看不出线程哪里自己启动运行副本了。
    现在我应对的办法是:
    设置一个全局变量cx
    线程每自己启动一次我就记录一次,当CX>1 时,我就EXIT,这样的做法对不对?貌视这样线程资源未释放,大家给点意见。