关于CSDN上下载的ThreadManager,请高手帮忙解析一下!

iloverenne iloverenne 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在论坛上下载了一个c#的ThreadManager,但由于水平有限,加之没有注释,所以想请高手对这些代码加上注释解析一下
不胜感谢!代码如下:
public delegate void ThreadActivationCallback();
public delegate void JobFinishCallback(object state);
public delegate bool OnErrorCallback(Exception exc);

public class ThreadManager
{

public event ThreadStart ThreadStarted;
public event ThreadStart ThreadFinished;
public event WaitCallback JobStarted;
public event WaitCallback JobFinished;
public event OnErrorCallback OnError;
public event ThreadStart Idle;
public uint MaxThreads;
internal int activeThreads = 0;
internal Stack workItems;
internal int threadTimeout = 5000; // 5 seconds
private Timer timer;
public string Name;

public void ClalThreadPool(string name, uint maxThreads)
{
Name = name;
MaxThreads = maxThreads;
workItems = Stack.Synchronized(new Stack((int)(10 * maxThreads)));
timer = new Timer(new TimerCallback(OnTimer), null, 0, 2000);
}

public bool QueueUserWorkItem(WaitCallback callback, object state)
{
if (callback == null)
return false;
lock (this)
{
workItems.Push(new WorkItem(callback, state));
if (activeThreads == 0)
WorkThread.AddWorker(this);
return true;
}

}

public void OnTimer(object state)
{
lock (this)
{
if (workItems.Count == 0)
return;

if (activeThreads < MaxThreads)
WorkThread.AddWorker(this);
}

}

internal void ThreadStartedEvent()
{
if (ThreadStarted != null)
ThreadStarted();
}

internal void ThreadFinishedEvent()
{
if (ThreadFinished != null)
ThreadFinished();
}

internal void JobStartedEvent(object parameter)
{
if (JobStarted != null)
JobStarted(parameter);
}

internal void JobFinishedEvent(object parameter)
{
if (JobFinished != null)
JobFinished(parameter);
}

internal void IdleEvent()
{
if (Idle != null)
Idle();
}

internal bool OnErrorEvent(Exception exc)
{
if (OnError != null)
return OnError(exc);
return false;

}

public void Stop()
{
lock (this)
{
timer.Change(Timeout.Infinite, Timeout.Infinite);
workItems.Clear();
MaxThreads = 0;
}

}

}

internal class WorkItem
{
public object parameter;
public WaitCallback callback;
public WorkItem(WaitCallback callback, object state)
{
this.parameter = state;
this.callback = callback;
}

}

internal class WorkThread
{
ThreadManager pool;
internal WorkThread(ThreadManager pool)
{
this.pool = pool;
}

static public void AddWorker(ThreadManager pool)
{
Interlocked.Increment(ref pool.activeThreads);
WorkThread worker = new WorkThread(pool);
Thread thread = new Thread(new ThreadStart(worker.Loop));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}

private void Loop()
{
try
{
pool.ThreadStartedEvent();

while (true)
{
WorkItem item = null;
try
{
item = (WorkItem)pool.workItems.Pop();
}

catch
{
Thread.Sleep(pool.threadTimeout);
item = (WorkItem)pool.workItems.Pop();
if (item == null)
break;
}
try
{
pool.JobStartedEvent(item.parameter);
/*
Write your functions you want to process
* Here we cast the item.parameter into the
* ProcessingSteps and get the type to run
* According to the type related functions
* will be called.
* E.g. if it is CreateProcess then
* CreatePrcess of ProcessEngine will be called.
* Same way functions called for each parameter.
*
*/
//item.callback(item.parameter);
// Following is my function and it is called by passing parameter.
//ProcessingManager.Process((Processingstep)item.parameter);
pool.JobFinishedEvent(item.parameter);
}

catch (Exception exc)
{
try
{
EngineLog.UpdateLogLine(exc.ToString());
pool.OnErrorEvent(exc);
}

catch (Exception critical)
{
// Check for critical exception -- pseudo code
//if (critical is CRITICAL)
throw critical;
}

}

if (pool.activeThreads > pool.MaxThreads)
return;
}

}

catch { }
finally
{
Interlocked.Decrement(ref pool.activeThreads);
}
pool.ThreadFinishedEvent();
if (pool.activeThreads == 0)
pool.IdleEvent();

}
}
...全文

相关推荐

Python库 | threadmanager-0.0.2.tar.gz

资源分类:Python库所属语言:Python资源全名:threadmanager-0.0.2.tar.gz资源来源:官方安装方法:https://lanzao.blog.csdn.net/artic

挣扎的蓝藻

Win7上VS2015编译和使用Thrift

可以从Boost官方网站下载最新或特定版本的源码包,例如boost_1_68_0.tar.gz。下载完成后,将其解压缩至指定路径,如E:\boost_1_68_0。

qi__ren

C#多线程多任务管理模型.zip

**文件中的代码示例**: - **ThreadManager.cs**:可能包含线程管理类,用于创建、控制和协调线程。

大龙软件工作室

【高速互连技术】基于线性均衡的PCIe链路扩展方案:重驱动器在高损耗通道中的信号完整性优化

内容概要:本文介绍了如何利用线性均衡技术扩展PCI Express(PCIe)链路的传输距离,重点探讨了重驱动器(Re-Driver)在补偿PCB和电缆信道损耗中的作用。文章回顾了Re-Driver的发展历程,分析其性能特点,解释其在不同信道环境下的应用条件,并强调线性操作对保持信号完整性及满足PCIe规范的重要性。通过眼图分析、频率响应和Tx预设波形等手段,展示了R

Kernel_RDMA

谐波去噪基于随机奇异值分解和软阈值的大型数据集中的强大高效谐波去噪研究(Matlab代码实现)

内容概要:本文研究了一种基于随机奇异值分解(Randomized SVD)和软阈值(Soft Thresholding)的高效谐波去噪方法,旨在解决大型数据集中谐波干扰的抑制问题。该方法通过引入随机化技术加速传统奇异值分解过程,在保障信号主要特征完整性的同时,显著提升了高维数据处理的计算效率与实时性,适用于电力系统、通信等领域的复杂信号处理场景。文中系统阐述了算法的数学理论基础、实现步骤及在Matlab环境下的具体代码实现,并通过仿真实验验证了其在不同噪声水平下对谐波成分的有效识别与去除能力,展现出优异的鲁棒性与工程实用价值。; 适合人群:具备一定信号处理理论基础和Matlab编程能力,从事电力系统分析、通信工程、自动化控制或相关领域研究的研发人员及硕士、博士研究生。; 使用场景及目标:①应用于大规模实测信号中谐波成分的快速提取与抑制;②用于提升电能质量监测、设备故障诊断、精密仪器测量等应用中的信号信噪比;③为高维时序数据的高效去噪提供可复现、易部署的算法模板与技术参考。; 阅读建议:建议读者结合提供的Matlab代码逐模块理解算法实现细节,重点掌握随机SVD与软阈值去噪的协同机制,并尝试在实际采集数据上进行参数调优与性能测试,以深入理解其适用边界与优化潜力。

三伯
评论 5
收藏 已收藏
分享
返回顶部
iloverenne
C# 111,129 成员 642,539 内容