我想不应该是每五秒就开起一个线程,你的过程suba每次运行都会产生一个新的线程,
我想你的意思可能是需要让同一个线程每五秒去做一件事情,是不是这样的?如果是这样的,你要把:
clsA cla=new clsA();
Thread Tha=new Thread(new ThreadStart(suba));
Tha.start();
放到另外一个函数中,在程序启动是调用他,而在void suba()中写上你要执行的任务.
你的程序的思路相当混乱,suba每五秒产生一个线程,而该线程会通过调用classB.b1();
产生另外一个线程,而你在b1()里的 th1.Abort();只是关闭了在b1中开起的那个线程,而没有将suba()中开起的相关线程关掉,况且你在suba中的线程是5秒执行一次任务,而在b1中却等待六秒,也就是b1中的那个线程还没有关闭,你这边suba又创建了一个新的。
不停的增加主要的原因是suba只是不停的新建线程而从来没有关闭过任何一个。
我想你的意思可能是需要让同一个线程每五秒去做一件事情,是不是这样的?如果是这样的,你要把:
clsA cla=new clsA();
Thread Tha=new Thread(new ThreadStart(suba));
Tha.start();
放到另外一个函数中,在程序启动是调用他,而在void suba()中写上你要执行的任务.
你的程序的思路相当混乱,suba每五秒产生一个线程,而该线程会通过调用classB.b1();
产生另外一个线程,而你在b1()里的 th1.Abort();只是关闭了在b1中开起的那个线程,而没有将suba()中开起的相关线程关掉,况且你在suba中的线程是5秒执行一次任务,而在b1中却等待六秒,也就是b1中的那个线程还没有关闭,你这边suba又创建了一个新的。
不停的增加主要的原因是suba只是不停的新建线程而从来没有关闭过任何一个。
我说明一下:
我不是让一个线程每隔五秒去做一件事,而是这样的,我从数据库中查出Ip地址,我要检测这些IP地址的主机状态。所以我对于每一个IP开一个线程去检测。
而我检测的时候有可能机器没有反应而死掉,所以我又另开了一个线程去检测,等待六秒如如没有响应那么认为它没有响应。定时器的值我是随便写的,我试了不管定时器的值认为多少,线程还是会照样增加(不过是慢一些)
别外,我觉得线程应该是自动结束的吧,所以我只在b1()里调了 th1.Abort()()。
多谢赐教!
if(th1.Join(6000))//等待六秒
这一句是什么意思啊
你检测的机子没反应,通过socket的超时来判断
bytes = udp.Receive(..)
如果对方没有响应它就死在这里了,
所以我
if(th1.Join(6000))//等待六秒但是无法将这个线程强行结束掉。
xxx.Abort()也没有终止线程,是这样的,我试了五个IP(即创建了五个线程),其中三个是正常的,我在调试的时候就只看到有三个线程退出了。其余二个没有退出,如果我把另外的二个IP也改为正常的话,那么可以看到有五个线程退出。不知道调用.Abort()之后是否还要做别的处理。它没有终止这个线程。
xxx.Abort()也没有将线程终止掉我是这样试的:我有五个IP要检测,即开了五个线程,有三个IP是正常的,我在调试的时候发现只有三个线程退出了,还有二个没有退出。
如果我把另外两个IP也改为正常的,那么有五个线程退出。调用.Abort方法没有使线程退出。