独立线程的任务队列
来源:互联网 发布:数控铣床编程简单实例 编辑:程序博客网 时间:2024/06/02 06:52
因为正在写一个设备通信的程序,里面各个模块都是独立线程的任务队列模式,所以抽取了一个基类以便代码的复用。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace TaskQueue{ /// <summary> /// 独立线程任务队列基类 /// </summary> /// <typeparam name="T">任务类型</typeparam> public abstract class TaskQueue<T> { protected bool isStopped; protected Thread workThread; protected Queue<T> taskQueue = new Queue<T>(); protected int waitTime = 500; public int WaitTime { get { return waitTime; } set { waitTime = value; } } public void Start() { if (workThread != null && workThread.IsAlive) return; isStopped = false; workThread = new Thread(new ThreadStart(run)); workThread.Start(); } public void Stop() { isStopped = true; } public void AddTask(T task) { taskQueue.Enqueue(task); } protected void run() { while (true) { if (taskQueue.Count == 0) { if (isStopped) break; AddTask(getNewStartTask()); Thread.Sleep(waitTime); continue; } T task = taskQueue.Dequeue(); executeTask(task); } } protected abstract void executeTask(T task); protected abstract T getNewStartTask(); }}
代码很少,但是使用起来很方便,只需要实现两个抽象方法就可以了。
namespace TaskQueue{ class Example : TaskQueue<string> { protected override void executeTask(string task) { //执行单个任务 if (task == null) return; //your code here } protected override string getNewStartTask() { //该方法是在任务队列为空时调用的 //如果想让该任务队列自动发起任务(比如被动的轮询)则在此方法中返回一个起始任务 return null; } }}
启动线程调用Start方法
停止线程调用Stop方法
添加任务调用AddTask方法
设置无任务时的等待时间WaitTime,默认500ms
0 0
- 独立线程的任务队列
- C++ 实现线程安全的任务队列
- 线程池任务队列
- 线程池任务队列
- 单线程任务队列
- 线程池任务队列
- 任务队列过程 对于任务的处理采用单独的线程 和任务列表进行处理
- java 线程池 任务队列
- 最精简的java 线程池与任务队列
- java线程池2-任务队列的规则
- 最精简的java 线程池与任务队列
- Js单线程里的一些事(任务队列)
- 解析线程池中任务队列(BlockingQueue)的分类
- 利用线程消息队列,实现任务队列
- Android中的线程池与任务队列
- 任务队列线程函数,用互斥体保护
- Android中的线程池与任务队列
- Android中的线程池与任务队列
- 关于Android studio gradle相关错误
- AndroidStudio集成二维码扫描
- JavaScript对Json的增删改属性
- 指针以及二维数组
- cuda编程入门示例23
- 独立线程的任务队列
- TensorFlow官方教程学习 MNIST For ML Beginners
- MAC Web 共享的目录
- 从开源代码Nginx中学习编码风格
- 微信小程序开发—快速掌握组件及API的方法
- C++ 之引用
- JS作用域
- 王德顺演讲结语-白桦:《船》
- 软件是如何驱动硬件的,代码是怎样对计算机实现控制的?