在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
类 Create 了就要 Free; 但 TThread(的子类) 有特殊性, 很多时候我们不能确定新建的线程什么时候执行完(也就是什么时候该释放); 如果线程执行完毕自己知道释放就好了, 所以 TThread 给了一个布尔属性 FreeOnTerminate, 如果为 True, 线程执行完毕后就会自释放.
首先看下面的例程 type TMyThread = class(TThread) protected procedure Execute; override; end; procedure TMyThread.Execute; var i: Integer; begin FreeOnTerminate := True; {这可以让线程执行完毕后随即释放} for i := 0 to 500000 do begin Form1.Canvas.Lock; Form1.Canvas.TextOut(10, 10, IntToStr(i)); Form1.Canvas.Unlock; end; end; procedure TForm1.Button1Click(Sender: TObject); begin TMyThread.Create(False); end; TThread 类有一个抽象方法(Execute), 因而是个抽象类, 抽象类只能继承使用, 上面是继承为 TMyThread. procedure TForm1.Button1Click(Sender: TObject); var MyThread: TMyThread; begin MyThread := TMyThread.Create(False); end; 因为 MyThread 变量在这里毫无用处(并且编译器还有提示), 所以不如直接写做 TMyThread.Create(False);
关于 FreeOnTerminate 在 TThread 类的例子中, 应该有这句: FreeOnTerminate := True; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论