zoukankan      html  css  js  c++  java
  • 主线程和子线程

      一般情况下,一个应用程序有N(N>=1)个进程;每个进程有1个主线程,N(N>=1)个子线程,主线程退出,子线程就停止执行跟着退出;单核cup,操作系统通过时间片(30ms不等)轮转算法,根据优先级调度线程的执行和挂起,多核cup,可以真正实现线程的并发执行(某一时刻,同时运行多个线程)。

         1、让主线程等待子线程

              为了保证子线程顺利执行完成,可以调用子线程的join()方法,让主线程等待该子线程执行完成再继续往下执行。

         2、开启线程

              (1)Thread实例对象的start()方法,告诉操作系统可以调度次线程了,可以通过此方法向线程传递参数;

              (2)用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程:

        public delegate int Mydel(int para1, int para2);
        static int Addfun(int pa1, int pa2)
        {
          return pa1 + pa2;
        }
        static void Main(string[] args)
        {
          Mydel adddel = new Mydel(Addfun);
          IAsyncResult delresult = adddel.BeginInvoke(1, 2, new AsyncCallback(ProcessAfterFunExecute),"s");//异步启动一个线程
          //var result = adddel.EndInvoke(delresult);//等待子线程的执行,拿到线程返回结果
          Thread.Sleep(1000);
          Console.Read();

        }
        static void ProcessAfterFunExecute(IAsyncResult result)
           {
          AsyncResult funAsyncResult = (AsyncResult)result;
          Mydel adddel = (Mydel)funAsyncResult.AsyncDelegate;
          var retval = adddel.EndInvoke(funAsyncResult);
          Console.WriteLine("返回值是:" + retval + "@"+ Thread.CurrentThread.ManagedThreadId);

        }

         3、放弃线程

              abort()方法,强制舍弃线程,内部会出现异常,尽量少使用,会造成程序性能损失

         4、挂起(暂停)线程

              suspend(),挂起此线程。

         5、线程同步

              lock()同步代码块;

  • 相关阅读:
    SQL 通配符
    低压电器及其控制
    计算机组成原理
    ASP.NET MVC 4 跨域
    C#排序算法小结
    C# 集合扩展快速排序算法
    C# 排序算法记录
    文件大小
    ProcDump
    C# 获取文件MD5校验码
  • 原文地址:https://www.cnblogs.com/mingjia/p/4408931.html
Copyright © 2011-2022 走看看