线程安全退出有什么解决好方法?该如何处理
线程安全退出有什么解决好方法?
10几个线程访问文件,中间访问主窗体的控件(有互同步)。
结束程序的时候出错。code:5 应该说是窗体释后还访问了主窗体的控件。
if Terminated then exit;
if Unit_globals.IsExit then exit;
EnterCriticalSection(Critical1);
if Unit_globals.IsExit then exit;//防止已开始等待线程继续
等等方法都无效
waitforsingleObject 还没试,不过确定是会在退出时还要用户等。
------解决方案--------------------
访问主窗体控件使用synchronize或sendmessage
安全退出的话一直检测线程是否执行完,执行完的话释放线程资源。
------解决方案--------------------
在主窗体的closequery事件中,添加代码判断线程是否结束,如果没有结束根据你的情况或等待、或kill掉,之后把canclose设置成true。就ok了。
------解决方案--------------------
等待线程结束吧
------解决方案--------------------
先等所有线程结束吧。
------解决方案--------------------
释放所有加载的DLL或者程序,线程之类的
退出
------解决方案--------------------
设置标志,等待结束,强制退出线程是危险的事情。
------解决方案--------------------
我也碰到过这种情况,
主要用2种方法:一是在主线程发出Terminate()后,延迟等待;另一种是在主线程里WaitForSignalObject(),线程运行时是无信号的,结束了有信号.不过杯具的是,在多个线程的情况下,主线程用WaitForSignalObject()等待的时间有点长,搞不明白哪出问题,所以干脆用Sleep()来等待线程释放(释放的时间比较固定,呵呵),简单
可以参考下置顶贴或者这个贴子的讨论:http://topic.****.net/u/20110922/16/bcad403d-eb17-47d1-a284-3061a1fa53e6.html
------解决方案--------------------
等待线程结束
10几个线程访问文件,中间访问主窗体的控件(有互同步)。
结束程序的时候出错。code:5 应该说是窗体释后还访问了主窗体的控件。
if Terminated then exit;
if Unit_globals.IsExit then exit;
EnterCriticalSection(Critical1);
if Unit_globals.IsExit then exit;//防止已开始等待线程继续
等等方法都无效
waitforsingleObject 还没试,不过确定是会在退出时还要用户等。
------解决方案--------------------
访问主窗体控件使用synchronize或sendmessage
安全退出的话一直检测线程是否执行完,执行完的话释放线程资源。
------解决方案--------------------
在主窗体的closequery事件中,添加代码判断线程是否结束,如果没有结束根据你的情况或等待、或kill掉,之后把canclose设置成true。就ok了。
------解决方案--------------------
等待线程结束吧
------解决方案--------------------
先等所有线程结束吧。
------解决方案--------------------
释放所有加载的DLL或者程序,线程之类的
退出
------解决方案--------------------
设置标志,等待结束,强制退出线程是危险的事情。
------解决方案--------------------
我也碰到过这种情况,
主要用2种方法:一是在主线程发出Terminate()后,延迟等待;另一种是在主线程里WaitForSignalObject(),线程运行时是无信号的,结束了有信号.不过杯具的是,在多个线程的情况下,主线程用WaitForSignalObject()等待的时间有点长,搞不明白哪出问题,所以干脆用Sleep()来等待线程释放(释放的时间比较固定,呵呵),简单
可以参考下置顶贴或者这个贴子的讨论:http://topic.****.net/u/20110922/16/bcad403d-eb17-47d1-a284-3061a1fa53e6.html
------解决方案--------------------
等待线程结束