笑
笑一刀
Unregistered / Unconfirmed
GUEST, unregistred user!
语言为Delphi:
我在主线程中创建了一个线程:ThreadID1.我在这个线程中创建了一个对象Object1(这个对象创建过程中调用了动态连接库Dllx(在析构时释放掉)),然后调用了其一个成员函数fun1(对外接口),在这成员函数中我打开了一个文件(还在这个函数中关闭掉),并把文件的指针传到了动态连接库的函数fun2中。在fun2中我对这个文件进行操作。现在有问题如下:
问题:如果我在fun2中处理文件时出现了死循环(或者这个文件太大而处理时间过长),而我需要这个线程跳过死循环(这种情况应该不可能)或者安全的退出线程(我指的是线程要释放它所创建的所有资源:对象、动态连接库……),然后另外创建一个与上面同样功能的线程,我应该怎么办?
注:1、不用TeminateThread()API函数强制退出线程,因为这种方法不能释放所有资源。
2、提示:可以考虑一种类似Timer的方法,在线程内部创建两条并行的执行路线(line1,line2)。line1处理文件,line2统计line1的执行时间。当line1的执行时间大于一个事先设定的值时,line2就给线程发出通知,告知线程运行时间太长了,调用ExitThread()立即退出线程。(这方法我想了很久,一直没找到解决办法)
3、如果各位大侠有什么高招,请快快告知,谢了先。[]
我在主线程中创建了一个线程:ThreadID1.我在这个线程中创建了一个对象Object1(这个对象创建过程中调用了动态连接库Dllx(在析构时释放掉)),然后调用了其一个成员函数fun1(对外接口),在这成员函数中我打开了一个文件(还在这个函数中关闭掉),并把文件的指针传到了动态连接库的函数fun2中。在fun2中我对这个文件进行操作。现在有问题如下:
问题:如果我在fun2中处理文件时出现了死循环(或者这个文件太大而处理时间过长),而我需要这个线程跳过死循环(这种情况应该不可能)或者安全的退出线程(我指的是线程要释放它所创建的所有资源:对象、动态连接库……),然后另外创建一个与上面同样功能的线程,我应该怎么办?
注:1、不用TeminateThread()API函数强制退出线程,因为这种方法不能释放所有资源。
2、提示:可以考虑一种类似Timer的方法,在线程内部创建两条并行的执行路线(line1,line2)。line1处理文件,line2统计line1的执行时间。当line1的执行时间大于一个事先设定的值时,line2就给线程发出通知,告知线程运行时间太长了,调用ExitThread()立即退出线程。(这方法我想了很久,一直没找到解决办法)
3、如果各位大侠有什么高招,请快快告知,谢了先。[]