是个多线程的问题吗?
你把a声明为一个局部变量就可以了。
.....
begin
   when data comes do
   DowithThread;
end;procedure DowithThread;
var
  a : TMyThread;
begin
  a := TMyThread.create(self);
  a.FreeOnTerminate := True;
end;
这样,线程执行就会自动释放了。