以前是用for循环实现的多个串口发送数据,但是整个软件运行时间太长,领导让优化时间,我能想到的就是让多个串口并行操作数据,但是我对多线程不是很了解,试过拖多个串口控件实现,由于串口过多,效果不是很理想,所以想请假各位大神如何用多线程实现多串口同时通信?最好能有一个demo给我参考下,谢谢
http://msdn.microsoft.com/zh-cn/library/system.threading.tasks.parallel.foreach(v=vs.110).aspx
当然你的机器得有多个核心,单核心上不会有明显的优势。
要提高性能,通常会使用 IOCP 的方式。
多线程处理串口的倒是没有,DEMO代码倒是有,你搜下 ThreadPool.QueueUserWorkItem 这个东西吧
var doEvents = new ManualResetEvent[threadCount];
for (var i = 0; i < threadCount; i++)
{
doEvents[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(DealData), new object[] { i, doEvents[i] });
}
WaitHandle.WaitAll(doEvents);
public void DealData(object eventParams) {
var threadId = (int)(((object[])eventParams)[0]); //当前线程ID
var doEvent = (ManualResetEvent)(((object[])eventParams)[1]);
var perThreadCount = dataTable.Rows.Count / threadCount; //平均每个线程处理数据
for (int i = 0; i < dataTable.Rows.Count; i++) {
if (i < (threadId) * perThreadCount) continue;
if ((i >= (threadId + 1) * perThreadCount) && threadId != (threadCount - 1)) break;
ImportData(dataTable.Rows[i]);
}
doEvent.Set();
}
开多线程基本上是可以实现并行发送的,因为窗口速率相对CPU速度来说非常低
你直接多开线程操作串口就能有很大提升
如果你的for循环能满足你们对多串口特定速率的连续不中断的发送和接收,则换多线程不会给你带来额外的通讯效率。