📄 workerfunc.cs
字号:
using System;
using System.Threading;
using feiyun0112.cnblogs.com.CSDNReader.Model;
using System.Collections.Generic;
namespace feiyun0112.cnblogs.com.CSDNReader.Functions
{
class WorkerFunc
{
private WorkerFunc()
{
}
private static List<Worker> _workQueue = new List<Worker>();
private static bool blnNeedSort ;
private static object _lockQueueobject = new object();
static WorkerFunc()
{
Thread _workerThread;
_workerThread = new Thread(new ThreadStart(ThreadProc));
_workerThread.IsBackground = true;
_workerThread.Priority = ThreadPriority.BelowNormal;
_workerThread.Start();
}
private static void ThreadProc()
{
Worker worker;
while(true)
{
worker = null;
lock (_workQueue)
{
while ((_workQueue.Count == 0) )
{
Monitor.Wait(_workQueue);
}
worker = Dequeue();
}
if (worker != null)
{
worker.DoWork();
}
}
}
internal static void AddWorkerTask(Delegate aDelegate, WorkPriority priority, params object[] args)
{
lock (_workQueue)
{
Worker worker = new Worker(aDelegate, priority, args);
Enqueue(worker);
Monitor.Pulse(_workQueue);
}
}
private static Worker Dequeue()
{
Worker rs = null;
lock (_lockQueueobject)
{
if (blnNeedSort)
{
_workQueue.Sort(new WorkerComparer());
blnNeedSort = false;
}
rs = _workQueue[0];
_workQueue.RemoveAt(0);
}
return rs;
}
private static void Enqueue(Worker rs)
{
lock (_lockQueueobject)
{
if (!blnNeedSort && _workQueue.Count > 0)
{
if (_workQueue[_workQueue.Count - 1].CompareTo(rs) < 0)
{
blnNeedSort = true;
}
}
_workQueue.Add(rs);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -