线程安全退出有什么解决好方法? 本帖最后由 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 多线程调用动态链接库问题,在线等,高手进~~~ idtcpserver判断客户端ip地址变化的问题 用DELLPHI 郵件的問題 fastreport 3.X 如何控制每页固定显示30行!如果超过30行自动转到下页 怎样用TPrinter类打印一个类似于Excel的4行4列表格? 帮忙看看为什么执行不下去了?? Query问题 一个简单的出勤系统需要多少钱? 谁知道福州天力酒店软件 读取ini文件中某个section的全部value 大概有2000条写到TRicheidt中,如何做速度更快!!! 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