码迷,mamicode.com
首页 > 其他好文 > 详细

弦子博客学习心得记录

时间:2016-09-05 07:59:15      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

Delphi的线程可以通过调用AThread.Synchronize(AProc),可以将Proc放入主线程中同步运行,此时AThread将挂起,直到主线程执行完AProc。

如果有BThread,调用了BThread.Synchronize(BProc),而BProc中释放了AThread

procedure TBThread.BProc
begin
  AThread.Terminate;
  AThread.WaitFor;
  AThread.Free;
end;

此时我们的程序将会卡死,下面的代码可以避免死锁,是通用的线程等待结束代码。

 

技术分享
    AThread.Terminate;
    while not AThread.Finished do
    begin
      if GetCurrentThreadID = MainThreadID then  //由于是通过Synchronize同步到主线程执行,所以调用CheckSynchronize,防止死锁
        CheckSynchronize(0);

      Sleep(1);
    end;
    FreeAndNil(AThread);
技术分享

 如果以前没注意此重入问题,请修改你的代码吧。因为不能保证我们的代码被其他人用时不会出现重入。

此代码既支持Windows,也支持Android

不过包含的单元不一样:

技术分享
uses System.SyncObjs,
{$ifdef MSWINDOWS}
Windows;
{$endif}
{$ifdef POSIX}
Posix.Pthread;
{$endif}
技术分享

弦子博客学习心得记录

标签:

原文地址:http://www.cnblogs.com/diocp/p/5840994.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!