我是在主线程里开了个线程对一个很大的表(100M)进行处理
启动线程的代码是:
procedure TForm1.btnStartClick(Sender: TObject);
begin
  //DeleteInvalid;
  if ((sOldFileName = '') or (not fileExists(sDir + '\' + sOldFileName)))then begin
    IniCheckPath;
  end;
  if ((sOldFileName = '') or (not fileExists(sDir + '\' + sOldFileName)))then begin
    Messagebox(handle, '数据表路径不对,请先选择文件。', '警告', MB_OK + MB_ICONERROR);
    exit;
  end;
  if (MessageBox(handle, '先排序吗?按确定先排序,按取消不排序。', '提示', MB_OKCANCEL +MB_ICONINFORMATION) = ID_OK) then
    SortFlag := true
  else
    SortFlag := false;
  btnStop.Enabled := true;
  btnResult.Enabled := false;
  btnStart.Enabled := false;
  btnSelect.Enabled := false;
  btnSetWord.Enabled := false;
  btnExit.Enabled := false;
  trdCheck := TCheckThread.Create;  //创建查错线程
  //Edit1.Text := datetimetoStr(now);
  with trdCheck do
    OnTerminate := ThreadDone;
end;线程结束后的操作是这样的
procedure TForm1.ThreadDone(Sender :TObject);
var
  i :integer;
  mytextfile:textfile;
  sErrorFile : String;
  pNewTemp :pCallingRec;
begin
  ModifyToOld;//改回字段名
  sErrorFile := sCurrentDir + 'Error.txt';
  assignfile(mytextfile, sErrorFile);
  if fileexists(sErrorFile) then
    deletefile(sErrorFile);
  rewrite(mytextfile);
  try
      writeln(mytextfile, '记录号 ', '  主叫 ','  开始日期 ', '  开始时间 ', '  时长');
      pNewTemp := pError;
      i := 1;
      while pNewTemp <> nil do
      begin
        with pNewTemp^ do
        begin
          if i Mod 2 <> 0 then
            writeln(mytextfile);
          writeln(mytextfile, '  '+ IntToStr(iRecNo) + '   ', IntToStr(iCalling) + '  ', '  '+copy(sBeginTime, 1, 4)  + '      ', copy(sBeginTime, 5, 10)+ '     ', inttoStr(iDuration));
        end;
        pNewTemp := pNewTemp.pNext;
        Inc(i);
      end;
      pNewTemp := pError;
      while pNewTemp <> nil do
      begin
        pNewTemp := pNewTemp.pNext;
        Dispose(pError);
        pError := pNewTemp;
      end;
  finally
        closefile(mytextfile);
  end;
  btnStart.Enabled := true;
  btnResult.Enabled := true;
  btnSelect.Enabled := true;
  btnSetWord.Enabled := true;
  btnStop.Enabled := false;
  btnExit.Enabled := True;
  Running := false;   //表明线程已经结束
  //Edit2.Text := datetimetoStr(now);
end;