急,在多线程状态下,我想让每一子线程只运行N秒,然后删除该线程,如何做到呢? (100分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间
to NowCan,
呵呵,还是你说中了,就是一个socket而且还是一个长链接。
那怎么才能知道某个线程运行了多长时间呢??

 
我是这样想的。
主线程要有一个定时器,定时查询各个线程是否超时,比如1秒查询一次。
定义一个结构体,里面有两个成员。
一个是线程开始的时刻,这个可以在建立线程的时候用API-GetTickCount得到,是开机以来的毫秒数。
另一个是线程的HANDLE,这个也可以在建立线程的时候可以得到。
这个结构体要作为一个参数传给线程,然后把它加到一个List里面。
然后分两种情况,一是线程正常结束,这时线程应该给主线程发一个消息通知,并且这个通知包含了刚才传进来的结构体参数,主线程得到通知后就在List里面删除相应的结构体,这个List有方法可以实现。
另一种情况是线程死在某个地方了,那就只能强行杀死了。这里就要用到定时器了,在定时器事件里用GetTickCount得到当前时间,然后和List里面的每个线程的开始时间相减,如果结果大于你预设的超时值,
那就说明那个线程超时了,直接TerminateThread相应的句柄就行了。会有内存泄漏,但是没办法了。同时别忘了删除List里的相应项。
这样就应该可以了。
 
不要用强行ruin的方法
如果里面有不安全的代码肯定会出错的
因为线程大多是一些循环操作
建议使用在入口处增加计时
在循环中判断 如果到时了安全退出
或者专门搞一个线程队列 由一个线程管理入口时间和执行时间
由它负责执行和中止线程
然后检查是否所有线程退后后退出自己
再关闭主程序


 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部