浅析.Net下的多线程编程(2)
thread类分别提供了两个方法来挂起线程和重新开始线程,也就是thread.suspend能暂停一个正在运行的线程,而thread.resume又能让那个线程继续运行。不像windows内核,.net框架是不记录线程的挂起次数的,所以不管你挂起线程过几次,只要一次调用thread.resume就可以让挂起的线程重新开始运行。
thread类还提供了一个静态的thread.sleep方法,它能使一个线程自动的挂起一定的时间,然后自动的重新开始。一个线程能在它自身内部调用thread.sleep方法,也能在自身内部调用thread.suspend方法,可是一定要别的线程来调用它的thread.resume方法才可以重新开始。这一点是不是很容易想通的啊?下面的例子显示了如何运用thread.sleep方法:
while (continuedrawing) {
drawnextslide ();
thread.sleep (5000);
}
终止线程
在托管的代码中,你可以通过以下的语句在一个线程中将另一个线程终止掉:
thread.abort (); [来源www.iocblog.net]
下面我们来解释一下abort()方法是如何工作的。因为公用语言运行时管理了所有的托管的线程,同样它能在每个线程内抛出异常。abort()方法能在目标线程中抛出一个threadabortexception异常从而导致目标线程的终止。不过abort()方法被调用后,目标线程可能并不是马上就终止了。因为只要目标线程正在调用非托管的代码而且还没有返回的话,该线程就不会立即终止。而如果目标线程在调用非托管的代码而且陷入了一个死循环的话,该目标线程就根本不会终止。不过这种情况只是一些特例,更多的情况是目标线程在调用托管的代码,一旦abort()被调用那么该线程就立即终止了。
在实际应用中,一个线程终止了另一个线程,不过往往要等那个线程完全终止了它才可以继续运行,这样的话我们就应该用到它的join()方法。示例代码如下:
thread.abort (); // 要求终止另一个线程
thread.join (); // 只到另一个线程完全终止了,它才继续运行
但是如果另一个线程一直不能终止的话(原因如前所述),我们就需要给join()方法设置一个时间限制,方法如下:
thread.join (5000); // 暂停5秒
这样,在5秒后,不管那个线程有没有完全终止,本线程就强行运行了。该方法还返回一个布尔型的值,如果是true则表明那个线程已经完全终止了,而如果是false的话,则表明已经超过了时间限制了。
时钟线程
.net框架中的timer类可以让你使用时钟线程,它是包含在system.threading名字空间中的,它的作用就是在一定的时间间隔后调用一个线程的方法。下面我给大家展示一个具体的实例,该实例以1秒为时间间隔,在控制台中输出不同的字符串,代码如下:
using system;
using system.threading;
class myapp
{
private static bool ticknext = true;
public static void main ()
{
console.writeline ("press enter to terminate...");
timercallback callback = new timercallback (ticktock);
timer timer = new timer (callback, null, 1000, 1000);
console.readline ();
}
private static void ticktock (object state)
{
console.writeline (
Tag: 多线程
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。