最近发现以前写的代码里面TThread日志不完全,老是缺线程关闭的日志.研究了一下,发现是以前对线程理解有误,参见了一下Delphi下的Tthread代码
DEPHI的TThread类拾遗function ThreadProc(Thread: TThread): Integer;
DEPHI的TThread类拾遗var
DEPHI的TThread类拾遗  FreeThread: Boolean;
DEPHI的TThread类拾遗begin
end;

从这里看出,其实TThread类是调用BeginThread来实现的,而线程关闭的时候(无论是Destroy或者OnTerminate)其实是调用了主线程来处理关闭方法的.所以以往在主线程CLOSE的时候来记录线程释放的日志基本上会不成功.嘿嘿.所以以后关闭程序前要读个秒表来个LOAD过程

这里联想到,以往写的代码里面有很多线程释放的时候再来释放数据库链接、释放类实例,貌似都执行不到的(也可能是DEBUG不到)。做了一下试验,在Thread里面加了几个数据库链接,然后没有在Thread的Destroy里面CLOSE链接就直接释放Thread。结果,数据库链接好像也被关闭了,嘿嘿,难道是操作系统弄的还是数据库客户端来关的?还是未搞懂线程释放的话线程内资源是如何释放的!

相关文章:

  • 2021-12-05
  • 2021-11-11
  • 2021-05-06
  • 2021-06-16
  • 2021-08-28
  • 2021-11-05
  • 2022-03-09
猜你喜欢
  • 2021-09-01
  • 2022-12-23
  • 2021-12-19
  • 2021-09-29
  • 2022-02-01
  • 2022-12-23
相关资源
相似解决方案