c#如何重新构造线程程序 问题
我有一个恒定的数据包流。每次传入一个新包时(间隔100毫秒),都会弹出一个事件,我将包发送给一个类来处理数据并将其可视化。不幸的是,如果在处理当前包之前发送了新包,则包的处理可能会中止 我现在有什么 是用作其他程序的dll的代码。 当我开始编写dll时,我对c#还不熟悉,所以我不想做得太复杂。一切正常,但如果cpu非常忙,我会遇到一些丑陋的帧跳过(在我的可视化部分) 我有几个班,其中一个班负责处理所有的包裹。这个类大约有50个属性、25个函数和1000行代码。计算只需要6个函数。 其余部分是正确设置属性(如果用户更改设置) 我需要改变什么 所以现在我想使用一个列表来缓冲所有传入的数据。 该列表应由另一个线程处理。因此,将数据写入列表所需时间不太可能超过100 ms^^(2个数组,每个数组包含约40个元素,每个元素应等于零) 我在想什么 将提到的类拆分为两个独立的类。 一个处理包,一个处理设置。所以我将用户和“程序”输入分开。 创建使用“包处理”类处理缓冲数据的线程 我不知道的是什么c#如何重新构造线程程序 问题,c#,multithreading,C#,Multithreading,我有一个恒定的数据包流。每次传入一个新包时(间隔100毫秒),都会弹出一个事件,我将包发送给一个类来处理数据并将其可视化。不幸的是,如果在处理当前包之前发送了新包,则包的处理可能会中止 我现在有什么 是用作其他程序的dll的代码。 当我开始编写dll时,我对c#还不熟悉,所以我不想做得太复杂。一切正常,但如果cpu非常忙,我会遇到一些丑陋的帧跳过(在我的可视化部分) 我有几个班,其中一个班负责处理所有的包裹。这个类大约有50个属性、25个函数和1000行代码。计算只需要6个函数。 其余部分是正确
由于设置类包含处理类所需的重要属性,我不知道如何做到最好,因为处理类还需要更改/填充设置类中的缓冲区。但是这个将由主线程调用。还是最好不要分割设置和处理类,让它保持原样?我不太熟悉线程,阅读了这本免费电子书的第一章,我只想添加一个队列并实现一个线程来进行处理。这将有助于您跳过,并且只需要很少的更改。通过分离设置来重构代码似乎是一项没有什么好处的工作,而且可能会出现新的bug 添加队列
- 创建ConcurrentQueue(这是线程安全后进先出,这是您所需要的)
- 创建另一个循环并处理队列的线程
if (cq.TryDequeue(out newPacket)) { // Visualize new packet }
cq.Enqueue(newPacket);
if (cq.TryDequeue(out newPacket))
{
// Visualize new packet
}