threadvar :API 线程局部存储..........\买本DELPHI 5开发人员指南看看 就OK了

解决方案 »

  1.   

    threadvar 是线程局部存储,使用她就像一个全局变量一样简单,但对每个线程她有单独的值,你可以不用线程安全的控制代码访问她。其实在她背后隐藏了对 TlsAlloc, TlsFree, TlsGetValue, TlsSetValue WinApi 的调用,这也是她高级的地方。
    是的,freeonterminate:=true,那么 execute 函数执行结束了以后自动的free这个线程实例
    这样是不对的,因为此时实例已经被释放了。你不想释放可以 freeonterminate := False
      

  2.   

    1.相当于一个副本
    2。你可以不用freeonterminate
      

  3.   

    1、线程基变量何单元中的全局变量类似,只在本线程全局使用。定义形式如下:
    threadvar X: Integer;
    注意:
    (1)不能在函数和过程中使用线程基变量;
    (2)不要定义指针线程基变量,不要在非包(bpk)类的动态库(如dll)中使用线程基变量;
    (3)动态线程基变量(long strings、 wide strings(通过设为''), variants(通过设为Unassigned), dynamic arrays、 and interfaces(通过设为nil))需要代码释放内存资源。
    2、TThreadList只是用来存储多个线程的指针(注意不是一个Copy,而是一个refrence),便于批量操作。线程被存放在一个TThreadList里并不影响线程本身的Terminate和Free。FreeOnTerminate=True,则线程终止执行(Execute退出或者线程的Terminated属性被认为设为True,或者调用Terminate method)后自动销毁。
    —————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”等';
    I.Desire := '加不加分随你';
    —————————————————————————————————