首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

有没有可能一个线程的Execute运作结束,但线程未真正结束

2013-01-04 
有没有可能一个线程的Execute运行结束,但线程未真正结束?var th:a:procedure a.Execute begintryFreeOnTe

有没有可能一个线程的Execute运行结束,但线程未真正结束?
var
 th:a:

procedure a.Execute ;
begin
try
FreeOnTerminate := true;
.....
finally
th.Terminate;
end;
end;

有没有可能程序运行到了th.Terminate,但是线程没有真正结束?


[解决办法]
Classes单元的ThreadProc才是真正在线程中跑的全部代码,Execute只不过是其中的一部分!!!

function ThreadProc(Thread: TThread): Integer;
var
  FreeThread: Boolean;
begin
{$IFDEF LINUX}
  if Thread.FSuspended then sem_wait(Thread.FCreateSuspendedSem);
{$ENDIF}
  try
    if not Thread.Terminated then
    try
      Thread.Execute;
    except
      Thread.FFatalException := AcquireExceptionObject;
    end;
  finally
    FreeThread := Thread.FFreeOnTerminate;
    Result := Thread.FReturnValue;
    Thread.DoTerminate;
    Thread.FFinished := True;
    SignalSyncEvent;
    if FreeThread then FreeAndNil(Thread);
{$IFDEF MSWINDOWS}
    EndThread(Result);
{$ENDIF}
{$IFDEF LINUX}
    // Directly call pthread_exit since EndThread will detach the thread causing
    // the pthread_join in TThread.WaitFor to fail.  Also, make sure the EndThreadProc
    // is called just like EndThread would do. EndThreadProc should not return
    // and call pthread_exit itself.
    if Assigned(EndThreadProc) then
      EndThreadProc(Result);
    pthread_exit(Pointer(Result));
{$ENDIF}
  end;
end;

热点排行