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);
                });
  • 相关阅读:
    基于mAppWidget实现手绘地图--索引&DEMO
    C语言数据结构----栈的定义及实现
    libvirt命令行文档
    清理系统方法
    Linux 经典电子书共享下载
    使用数组实现队列----《数据结构与算法分析---C语言描述》
    清理系统垃圾
    epoll的内部实现 & 百万级别句柄监听 & lt和et模式非常好的解释
    进程、线程、socket套接字-资源大小 & 切换代价
    网络编程学习-面向工资编程
  • 原文地址:https://www.cnblogs.com/scyr/p/7339634.html
Copyright © 2011-2022 走看看