• 主线程和子线程


      一般情况下,一个应用程序有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()同步代码块;

  • 相关阅读:
    Params参数的应用
    用反射动态创建委托
    Javascript中的Array的运用
    四个JS代码与jquery架构简单运用
    base 基本用法转载自(MSDN)
    Microsoft AJAX Library 新特性简单代码
    典型的委托的不同写法(转载)
    创建反射实例|反射过滤|反射搜索
    【软工】第1次个人作业
    【软工】第0次个人作业
  • 原文地址:https://www.cnblogs.com/mingjia/p/4408931.html
Copyright © 2020-2023  润新知