And*_*ers 10 c# multithreading coding-style
我需要一些正确编码的建议:
我正在开发一个使用多个串行连接的程序.每条通信线路都有一个控制器作为抽象层.在控制器和串行端口之间,插入协议以将数据包装在包中,准备传输.该协议负责发送失败,重新发送等.为确保GUI不会挂起,每个连接线(协议和串行端口)都在一个单独的线程上创建.控制器由主线程处理,因为它在GUI中具有控件.
目前,当我创建线程时,我选择在它们上创建一个消息循环(Application.Run()),所以改为轮询缓冲区并且如果没有工作则让步,我只是调用线程(BeginInvoke)并使用消息循环作为一个缓冲区.这目前工作得很好,到目前为止没有严重的问题.
我现在的问题是:这是"良好的编码",还是我应该使用while循环而不是轮询缓冲区?或者第三件事?
我想显示代码,但到目前为止它是几千行代码,所以如果你需要查看代码的任何部分,请具体说明.:)
谢谢.
在每个线程中使用消息循环是完全可以的;Windows 针对这种情况进行了优化。避免轮询是正确的,但您可能想研究其他更高效的基于事件的设计,例如准备一个用于传输的包并调用以通知SetEvent线程它已准备好,或者像 Martin 那样使用信号量和线程安全队列詹姆斯建议道。