多线程查找局域网文件的问题
我做了一个多线程查找局域网上的文件的程序,是用枚举每个计算机的办法!但通常有一两个线程可能因为远程计算机响应慢的原因迟迟不返回,且占尽CPU时间,又很占内存,怎样解决?请高手指点! 问题点数:100、回复次数:7Top
1 楼zhujunfeng(ericss)回复于 2002-10-21 15:48:55 得分 15
设置超时,到时候自己结束掉,然后重起一个线程Top
2 楼Uranuz(沙子)回复于 2002-10-21 18:59:28 得分 0
但我不知如何在线程中用timer控件,可不可以再比点意见?Top
3 楼hongqi162(失踪的月亮)回复于 2002-10-22 08:51:23 得分 5
gzTop
4 楼strongq(火血狼)回复于 2002-11-08 15:08:04 得分 0
upTop
5 楼strongq(火血狼)回复于 2002-11-08 15:10:34 得分 30
(但我不知如何在线程中用timer控件)
你可以在循环体里得到当前时间,然后再与开始的时间比较。
Top
6 楼ChipHead(满脑袋芯片和程序的人)回复于 2002-11-08 16:04:59 得分 25
设置一个控制线程,登记每个线程的启动时间,如果运行了太长的时间就发一个Terminate调用给工作线程要求它结束;每个工作线程定期检查控制线程发来的信号(例如每检查一个文件是否符合搜索条件后检查Terminated属性),如果Terminated = True那么就不再继续搜索远程计算机。
如果工作线程在超时之前就已经结束工作,需要通知控制线程不必检查自己是否超时,否则因为FreeOnTerminate属性默认是True,如果工作线程已经结束工作,那么就自己释放了,这时控制线程发现它超时,再调用Terminate时会出Access Violation。Top
7 楼ChipHead(满脑袋芯片和程序的人)回复于 2002-11-08 16:07:45 得分 25
线程占尽CPU时间不一定因为远程计算机响应慢,很可能是因为你没有在Execute当中加入适当的Sleep(10)之类的调用。如果线程不断地执行循环而没有一定的Sleep时间,经常会出现独占CPU的情况。Top




