c# - 好的编码? (多个消息循环)

标签 c# multithreading coding-style

我需要一些关于正确编码的建议:

我正在开发一个使用多个串行连接的程序。每条通信线路都有一个 Controller 作为抽象层。在 Controller 和串行端口之间,插入一个协议(protocol)以将数据包装在数据包中,以备传输。该协议(protocol)负责处理失败的交付、重新发送等。 为确保 GUI 不会挂起,每条连接线(协议(protocol)和串行端口)都在单独的线程上创建。 Controller 由主线程处理,因为它在 GUI 中有控件。

目前,当我创建线程时,我选择在它们上创建一个消息循环 (Application.Run()),因此我只是调用线程 (BeginInvoke) 并使用消息循环作为缓冲区。这目前工作得很好,到目前为止没有严重的问题。

我现在的问题是:这是“好的编码”,还是我应该在踏板上使用 while 循环并改为轮询缓冲区?还是第三件事?

我想展示代码,但到目前为止有几千行代码,所以如果您需要查看代码的任何部分,请具体说明。 :)

谢谢。

最佳答案

在每个线程中使用消息循环非常好; Windows 针对这种情况进行了优化。避免轮询是正确的,但您可能想研究其他更有效的基于事件的设计,例如准备要传输的包并调用 SetEvent 通知线程它已准备就绪,或者Martin James 建议的信号量和线程安全队列。

关于c# - 好的编码? (多个消息循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643706/

相关文章:

java - Rest Web 服务接口(interface) - 多线程

css - LESS.JS CSS 中的冗余,使用 Mixins 而不是选择器继承?

c# - Visual Studio 解决方案资源管理器不显示表单 cs 文件

c# - 访问托管内容的终结器

java : Mutithreading & file reading

c++ - 在c中后台运行线程

C# 命名空间/文件夹 : when is getting too organized/creating too many namespaces not right?

javascript - 以什么顺序声明变量和函数?

c# - 如何修复 Visual Studio 2015 中的模糊字体

c# - 如何在我的客户端上捕获 HTTP 传出请求?