优先考虑线程。

时间:2016-02-03 01:44:17

标签: c# multithreading threadpool

所以我的应用程序有一个Points集合。每个点都有一个CheckStatusTimer,CheckNewDataTimer和CheckDevceTimer(它们是System.Timers)。 Point有一个sampleTime属性。如果采样时间设置为30秒,则:

CheckStatusTimer.Interval = sampleTime/4;   // ~7 seconds, it will reset and start over
CheckNewDataTimer.Interval = sampleTime/2;  // 15 seconds, it will reset and start over
CheckDevceTimer.Interval = sampleTime;      // 30 seconds, it will reset and start over

所有这些定时器都会触发一个从连接的(Modbus tcp)设备中提取数据的功能,这需要一些时间。可以想象,我添加的点越多,将调度的线程越多,用户调用的处理时间就越长。

我创建了一个处理用户传入消息的任务。

Task.Factory.StartNew(() => this.ProccessMessage(session, value));

我试图设置(我知道这是个坏主意)

Thread.CurrentThread.Priority = ThreadPriority.Highest; 

但这没有用,也试图

    var worker = new Thread(() = this.ProccessMessage(session, value))
                     {
                         Priority = ThreadPriority.Highest
                     };
    worker.Start();

它不起作用,处理时间没有差异。 所以我的问题是如何在计时器线程/方法上优先考虑线程或this.ProccessMessage(会话,值)方法。因此,当用户拨打电话时,无论我的收藏大小如何,它都会立即做出响应而不会有任何延迟。

1 个答案:

答案 0 :(得分:1)

看起来你需要队列。一个高优先级队列和一个低优先级队列。所有计时器线程都应该发布到低优先级队列。用户消息应该转到高优先级队列。要处理这些队列,您可以拥有一个读取队列并处理数据的线程池,首先处理高优先级队列。这种方法可能适用于您的问题。