线程安全退出有什么解决好方法? 本帖最后由 jianye112 于 2011-11-02 01:05:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 访问主窗体控件使用synchronize或sendmessage安全退出的话一直检测线程是否执行完,执行完的话释放线程资源。 在主窗体的closequery事件中,添加代码判断线程是否结束,如果没有结束根据你的情况或等待、或kill掉,之后把canclose设置成true。就ok了。 释放所有加载的DLL或者程序,线程之类的退出 我也想到用一楼的。用sendmessage,这样应该安全了吧。//线程里 sendmessage(form1.handle, threadmsg, ........//form1接收case 'threadmsg': dothreadmsg(...);//处理函数procedure dothreadmsg(...);begin EnterCriticalSection(Critical1);//这方式这同步还有效果的吧? try .... finally ........end; TerminateProcess(GetCurrentProcess(), 0);//直接OK 我也碰到过这种情况,主要用2种方法:一是在主线程发出Terminate()后,延迟等待;另一种是在主线程里WaitForSignalObject(),线程运行时是无信号的,结束了有信号.不过杯具的是,在多个线程的情况下,主线程用WaitForSignalObject()等待的时间有点长,搞不明白哪出问题,所以干脆用Sleep()来等待线程释放(释放的时间比较固定,呵呵),简单可以参考下置顶贴或者这个贴子的讨论:http://topic.csdn.net/u/20110922/16/bcad403d-eb17-47d1-a284-3061a1fa53e6.html 求达人解购买正版Delphi软件的疑惑 处理Application.OnException时,怎么获取具体类的名称呢? 如何在一个视频捕获窗口上捕获我的自定义消息(比如鼠标消息) 对文档的管理有没一个好的思路 请问在delphi中如何执行dos命令? 又是ACEESS查询日期+时间的问题,特急~~快帮我解决了吧,搞死我了~ 关于ListView的问题! 关于判断的问题 如何编写自己的窗体类,比如MacOS样式的窗体? BDE连接ASCEE数据库 webbrowse怎么调用.do类型的地址? 发个A*寻径算法....
退出
sendmessage(form1.handle, threadmsg, ........//form1接收
case 'threadmsg':
dothreadmsg(...);//处理函数
procedure dothreadmsg(...);
begin
EnterCriticalSection(Critical1);//这方式这同步还有效果的吧?
try
....
finally
........
end;
主要用2种方法:一是在主线程发出Terminate()后,延迟等待;另一种是在主线程里WaitForSignalObject(),线程运行时是无信号的,结束了有信号.不过杯具的是,在多个线程的情况下,主线程用WaitForSignalObject()等待的时间有点长,搞不明白哪出问题,所以干脆用Sleep()来等待线程释放(释放的时间比较固定,呵呵),简单
可以参考下置顶贴或者这个贴子的讨论:http://topic.csdn.net/u/20110922/16/bcad403d-eb17-47d1-a284-3061a1fa53e6.html