zoukankan      html  css  js  c++  java
  • 线程 终止

    线程终止和线程启动一样,并不是即时模式。

    类似于使用 Thread.Abor();去终止线程,如果 Thread未执行完线程内的非托管代码时,是不会出现ThreadAborException。但是当Thread 执行到CLR的时候,才会抛出异常。

    线程终止机制:如果线程需要终止,Thread位开发者提供了接口:Cancled。线程在工作时,还会以某种频率检测Cancled,当检测到Cancled 时 线程会自动停止。

    FCL(Framework class library 即类库)为我们提供了标准的取消模式:协作取消模式(Cooperative Cancelletion),下面是简单的使用实例

            CancellationTokenSource cancel = new CancellationTokenSource();            
           Thread t = new Thread(() =>
                {
                    while (true)
                    {
                        //检测到停止标识
                        if (cancel.IsCancellationRequested)
                        {
                            Console.WriteLine("线程已停止" + DateTime.Now);
                            break;
                        }
                        Console.WriteLine(DateTime.Now);
                        Thread.Sleep(1000);
                    }
                });
                //t.Priority = ThreadPriority.Highest;
                t.IsBackground = true;
                t.Start();
                cancel.Cancel();
                Console.WriteLine("线程已启动" + DateTime.Now);

    调用者通过CancellationTokenSource的 Cancel() 通知工作线程退出。而线程则以 每1000ms的频率去检测Cancel的取消标识。

    协议式终止线程中使用的关键类 CancellationTokenSource。 其中它有一个属性 Token 提供了IsCancellationRequested 标识来判断是否停止线程。它还有一个回调方法需要注意Register();

                cancel.Token.Register(()=> {
                    Console.WriteLine("线程终止回调函数" + DateTime.Now);
                });
  • 相关阅读:
    navicat执行大容量的.sql文件时的设置
    unity3d的四元数 Quaternion
    Unity运行时刻资源管理
    unity3d 加密资源并缓存加载
    unity3d webplayer 16:9 居中显示模板
    quaternion*Vector3的新理解
    PoolManager
    网上关于碰撞的资料
    游戏美术:色彩原理
    unity3d下载Obb分包文件
  • 原文地址:https://www.cnblogs.com/scyr/p/7339634.html
Copyright © 2011-2022 走看看