我有一个窗体,其中有一个全局变量myThread01type
  Tmainform = class(TForm)
  .....
end;var
  mainform: Tmainform;
  myThread01: TThread;在Tmainform中,一个函数调用了myThread01
procedure Tmainform.thread3;
begin
  // 永循环线程1
  myThread03 := TThread.CreateAnonymousThread(
    procedure
    begin
      while true do
    begin
    .........
     end;
    end);
  myThread03.Priority := tpTimeCritical;
  myThread03.Start;
end;myThread01中是无限循环的代码。这个myThread01的生存期是多少呢? 我发现有时打开子窗体后,会出现myThread01失效的情况,不知道是不是和生存期有关系呢??

解决方案 »

  1.   

    你实现线程的代码不标准(有问题)
    1、定义一个自己的线程类型
    type
      TMyThread = class(Tthread)
        protected
          procedure Execute;override;
        end;
    2、给线程写个实体的过程
    procedure TMyThread.Execute;
    begin
      ThreadOn:=True;
      ThreadEnd:=False;
      FreeOnTerminate:=true;
      i:=0;
      repeat
       。。
        sleep(75);
      until Terminated or ThreadEnd;
      ThreadOn:=False;
    end;
    3、声明一个对应的变量
    var MyThread:TMyThread; 
    它是全局的。它指向线程的地址。
    4、创建调用线程
      myThread := TMyThread.Create();创建线程,它要实现体:这样才能实现线程。问题:至于线程抛入均匀长时间,要看MyThread.Execute;代码执行情况,执行完线程就自动释放。
      

  2.   

    打字有误:
    这样才能实现线程。问题:至于线程生存执行多长时间,要看MyThread.Execute;代码执行情况,执行完线程就自动释放。至于生存期
    变量MyThread它是全局的。线程的存在取决于,线程的实现部分代码MyThread.Execute;执行时间。
      

  3.   

    procedure Tmainform.thread3;
    中没有看到对myThread01的访问呢?是不是myThread03打错了?
      

  4.   

    myThread01和myThread03是什么关系?写错了吧?退出线程后释放需要设置FreeOnTerminate:=True;否则需要自己显式释放。没有退出条件的循环就是死循环,不会自动退出。
      

  5.   

    CreateAnonymousThread是新版本线程的用法,没有不妥。
      

  6.   

    一般使用CreateAnonymousThread创建匿名线程目的就是外面不用访问!
    而且线程这个东西,一般也不做访问,我也没见到mythread01,线程的生命周期,一般线程函数的execute完了,线程的运行周期也就完了,如果FreeOnTerimte这个设置为了true,就会自动释放,对象都不存在了,否则就是线程对象还在,但是线程已经结束