本人自己所在的项目是仪器的时序控制层代码开发。

下面简单说下需求的来源:

1. 需要把控制分多个任务,每个任务又包括了多个子任务。

2. 每个子任务需要按控制时序线固定起始时间开始执行,指定时间长内完成子任务。

所以才考虑到自己封装一个可以实时监控线程类来完成多个子任务的串行或并行执行,并在指定时间内返回是否执行成功或超时。

下面是实现的代码,主要是可以用此类更为方便操作线程。(这里要强调一点:如果实时性要求高,尽量使用Thread,不要用Task)。

using System.Threading;namespace XXX.Common
{public class AutomateThread{private const int SLEEP_TICK = 1;private const int SLEEP_WAIT_TICK = 100;
        
        \\执行单个任务,返回线程public static Thread StartNew(ThreadStart start, ThreadPriority priority = ThreadPriority.Normal){Thread t = new Thread(start);t.IsBackground = true;t.Priority = priority;t.Start();return t;}
        \\同时执行多个任务,并等待执行结束public static void TasksExecuteAsyn(params ThreadStart[] starts){Thread[] threads = new Thread[starts.Length];for (int i = 0; i < starts.Length; i++){threads[i] = StartNew(starts[i]);}WaitAll(threads);}\\单个任务,在给定执行时间内返回执行是否超时public static bool Monitor(int period, ThreadStart start){Tickwatch sw = Tickwatch.StartNew();Thread t = AutomateThread.StartNew(start);while (sw.ElapsedMilliseconds < period){if (!t.IsAlive){return false;}AutomateThread.Sleep(SLEEP_TICK);}return true;}
        \\等待所有线程执行结束public static void  WaitAll(params Thread[] threads){foreach (Thread t in threads){while (t != null && t.IsAlive){AutomateThread.Sleep(SLEEP_TICK);}}}
        \\主动释放CPU短等待时间public static void Sleep(int milliseconds){Tickwatch watch = Tickwatch.StartNew();while(watch.ElapsedMilliseconds <= milliseconds){Thread.Sleep(SLEEP_TICK);}}
       
       

 

友情提示:

后续的几篇文章对其应用作了更新和封装,可以在专栏里查看。

如果感觉对你有帮助,请支持肯定下博主的努力!

C# 实时监控线程类相关推荐

  1. 动态可监控线程池,你还没用起来吗?

    「使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢?」 1.代码中创建了一个 ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适 2.凭经验设置参 ...

  2. java 监听配置文件_java读取系统Properties配置文件利用线程实时监控配置文件变化...

    package util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  3. 看大众点评如何通过实时监控系统CAT打造7*24服务

    为什么80%的码农都做不了架构师?>>>    看大众点评如何通过实时监控系统CAT打造7*24服务 2015-06-08  尤勇  高可用架构 https://github.com ...

  4. SpringBoot+WebSocket实时监控异常

    欢迎关注方志朋的博客,回复"666"获面试宝典 写在前面 此异常非彼异常,标题所说的异常是业务上的异常. 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的 ...

  5. java解析日志数据_Java实时监控日志文件并输出的方法详解

    Java实时监控日志文件并输出的方法详解 想在前台显示数据同步过程中产生的日志文件,在网上找到解决方案,做了代码测试好用.这里做个记录 java.io.RandomAccessFile可以解决同时向文 ...

  6. Spring Boot WebSocket实时监控

    消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理.需要服务端主动向客户端发送消息,用WebSocket来实现这一功能. 前端 < ...

  7. WebSocket 实时监控

    需求 : 消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理. 效果图 : 前端代码 : <!DOCTYPE html> ...

  8. CAT ----分布式实时监控系统

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  9. 六、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量实时监控

    SpringCloud Alibaba全集文章目录: 零.手把手教你搭建SpringCloudAlibaba项目 一.手把手教你搭建SpringCloud Alibaba之生产者与消费者 二.手把手教 ...

最新文章

  1. 罗辑思维 - 当代的学习方法
  2. hadoop 文件介绍
  3. js alert 封装 layui
  4. SAX与DOM之间的区别 转帖
  5. asp.net怎么实现按条件查询_用这个提取函数王中王,制作数据查询表
  6. TalkingData崔晓波:移动数据工具发展的三个阶段
  7. Ajax模拟Form表单提交,含多种数据上传
  8. 五颜六色 CSS颜色代码表
  9. 华为asph是什么型号_华为手机各系列有什么区别 华为手机各系列介绍
  10. Android Wear 2.0首款手表来了;工信部明确增加物联网网号 | IoT黑板报
  11. 搞计算机的真的不配拥有爱情吗。这是她给我留下的最后一段话
  12. uboot的官方网站
  13. echarts x 起始_echarts实现获取datazoom的起始值(包括x轴和y轴)
  14. 打通实体店面线上线下私域场景之微信小程序通道
  15. linux正则表达式与文本处理工具
  16. arm指令集:精简指令集、复杂指令集
  17. 美国大学计算机视觉专业排名,美国大学计算机系统专业排名情况实用内幕分析大全...
  18. 32位系统能够识别多达内存_C ++程序可打印多达N个术语的卢卡斯系列
  19. 超级实用的PLSQLDEV客户端总结
  20. SSCI(社会科学引文索引)介绍

热门文章

  1. 如意验证对接TV 神,马搭建 源码,搭建简单,仅供学习交流
  2. 泊松融合(Poisson blend)
  3. 计算机视觉实战----AlexNet网络及使用colab跑YoloV5代码
  4. arm交叉编译器下载
  5. 国标GB/T28181协议下EasyGBS互联网无插件直播服务器对接华为VCN平台接入EasyGBS视频自动停止传输
  6. 北京19家A类定点医疗机构名单以及分布图
  7. marked.js读取markdown文件,图片实现点击放大
  8. JS 判断浏览器客户端类型(ipad,iphone,android)
  9. DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G
  10. JS中字符串的创建、操作及其方法