在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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}
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论