zoukankan      html  css  js  c++  java
  • c# sleep 例子 转载

    using System;
    using System.Threading;
    public class arr
    {
    public static void Main()
    {
    //int[] arr;
    //arr = new int[5];
    int luzi;
    for(luzi=1;luzi<10000;luzi++)
    {
    Console.WriteLine("第"+luzi+"行");
    if (luzi==5000)
    {
    Thread.Sleep(10000);
    }
    }
    }
    }

    第5000行开始暂停10秒

    NET 基础类库的System.Threading命名空间提供了大量的类和接口支持多线程。这个命名空间有很多的类。 System.Threading.Thread类是创建并控制线程,设置其优先级并获取其状态最为常用的类。他有很多的方法,在这里我们将就比较常用和 重要的方法做一下介绍:
         Thread.Start():启动线程的执行;
      Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用;
      Thread.Resume():继续已挂起的线程;
      Thread.Interrupt():中止处于 Wait或者Sleep或者Join 线程状态的线程;
      Thread.Join():阻塞调用线程,直到某个线程终止时为止
      Thread.Sleep():将当前线程阻塞指定的毫秒数;
      Thread.Abort():以开始终止此线程的过程。如果线程已经在终止,则不能通过Thread.Start()来启动线程。   通过调用Thread.Sleep,Thread.Suspend或者Thread.Join可以暂停/阻塞线程。调用Sleep()和 Suspend()方法意味着线程将不再得到CPU时间。这两种暂停线程的方法是有区别的,Sleep()使得线程立即停止执行,但是在调用 Suspend()方法之前,公共语言运行时必须到达一个安全点。一个线程不能对另外一个线程调用Sleep()方法,但是可以调用Suspend()方 法使得另外一个线程暂停执行。对已经挂起的线程调用Thread.Resume()方法会使其继续执行。不管使用多少次Suspend()方法来阻塞一个 线程,只需一次调用Resume()方法就可以使得线程继续执行。已经终止的和还没有开始执行的线程都不能使用挂起。Thread.Sleep(int x)使线程阻塞x毫秒。只有当该线程是被其他的线程通过调用Thread.Interrupt()或者Thread.Abort()方法,才能被唤醒。如 果对处于阻塞状态的线程调用Thread.Interrupt()方法将使线程状态改变,但是会抛出 ThreadInterupptedException异常,你可以捕获这个异常并且做出处理,也可以忽略这个异常而让运行时终止线程。在一定的等待时间 之内,Thread.Interrupt()和Thread.Abort()都可以立即唤醒一个线程。
         我们可以通过使用Thread.Abort()方法来永久销毁一个线程,而且将抛出ThreadAbortException异常。使终结的线程可以捕获 到异常但是很难控制恢复,仅有的办法是调用Thread.ResetAbort()来取消刚才的调用,而且只有当这个异常是由于被调用线程引起的异常。对 于A和B两个线程,A线程可以正确的使用Thread.Abort()方法作用于B线程,但是B线程却不能调用Thread.ResetAbort()来 取消Thread.Abort()操作。
         Thread.Abort()方法使得系统悄悄的销毁了线程而且不通知用户。一旦实施Thread.Abort()操作,该线程不能被重新启动。调用了这 个方法并不是意味着线程立即销毁,因此为了确定线程是否被销毁,我们可以调用Thread.Join()来确定其销毁,Thread.Join()是一个 阻塞调用,直到线程的确是终止了才返回。但是有可能一个线程调用Thread.Interrupt()方法来中止另外一个线程,而这个线程正在等待 Thread.Join()调用的返回。
        尽可能的不要用Suspend()方法来挂起阻塞线程,因为这样很容易造成死锁。假设你挂起了一个线程,而这个线程的资源是其他线程所需要的,会发生什么 后果。因此,我们尽可能的给重要性不同的线程以不同的优先级,用Thread.Priority()方法来代替使用Thread.Suspend()方 法。
    Thread类有很多的属性,这些重要的属性是我们多线程编程必须得掌握的。
      Thread.IsAlive属性:获取一个值,该值指示当前线程的执行状态。如果此线程已启动并且尚未正常终止或中止,则为 true;否则为 false。
      Thread.Name 属性:获取或设置线程的名称。
      Thread.Priority 属性:获取或设置一个值,该值指示线程的调度优先级。
      Thread.ThreadState 属性:获取一个值,该值包含当前线程的状态。thread状态
      System.Threading.Thread.ThreadState属性定义了执行时线程的状态。线程从创建到线程终止,它一定处于其中某一个 状态。当线程被创建时,它处在Unstarted状态,Thread类的Start() 方法将使线程状态变为Running状态,线程将一直处于这样的状态,除非我们调用了相应的方法使其挂起、阻塞、销毁或者自然终止。如果线程被挂起,它将 处于Suspended状态,除非我们调用resume()方法使其重新执行,这时候线程将重新变为Running状态。一旦线程被销毁或者终止,线程处 于Stopped状态。处于这个状态的线程将不复存在,正如线程开始启动,线程将不可能回到Unstarted状态。线程还有一个Background状 态,它表明线程运行在前台还是后台。在一个确定的时间,线程可能处于多个状态。据例子来说,一个线程被调用了Sleep而处于阻塞,而接着另外一个线程调 用Abort方法于这个阻塞的线程,这时候线程将同时处于WaitSleepJoin和AbortRequested状态。一旦线程响应转为Sle阻塞或 者中止,当销毁时会抛出ThreadAbortException异常。线程优先级
      System.Threading.Thread.Priority枚举了线程的优先级别,从而决定了线程能够得到多少CPU时间。高优先级的线程通 常会比一般优先级的线程得到更多的CPU时间,如果不止一个高优先级的线程,操作系统将在这些线程之间循环分配CPU时间。低优先级的线程得到的CPU时 间相对较少,当这里没有高优先级的线程,操作系统将挑选下一个低优先级 的线程执行。一旦低优先级的线程在执行时遇到了高优先级的线程,它将让出CPU给高优先级的线程。新创建的线程优先级为一般优先级,我们可以设置线程的优 先级别的值,如下面所示: Highest  AboveNormal   Normal   BelowNormal   Lowest

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/liye/p/1858423.html
Copyright © 2011-2022 走看看