我需要一些关于正确编码的建议:
我正在开发一个使用多个串行连接的程序。每条通信线路都有一个 Controller 作为抽象层。在 Controller 和串行端口之间,插入一个协议(protocol)以将数据包装在数据包中,以备传输。该协议(protocol)负责处理失败的交付、重新发送等。 为确保 GUI 不会挂起,每条连接线(协议(protocol)和串行端口)都在单独的线程上创建。 Controller 由主线程处理,因为它在 GUI 中有控件。
目前,当我创建线程时,我选择在它们上创建一个消息循环 (Application.Run()),因此我只是调用线程 (BeginInvoke) 并使用消息循环作为缓冲区。这目前工作得很好,到目前为止没有严重的问题。
我现在的问题是:这是“好的编码”,还是我应该在踏板上使用 while 循环并改为轮询缓冲区?还是第三件事?
我想展示代码,但到目前为止有几千行代码,所以如果您需要查看代码的任何部分,请具体说明。 :)
谢谢。
最佳答案
在每个线程中使用消息循环非常好; Windows 针对这种情况进行了优化。避免轮询是正确的,但您可能想研究其他更有效的基于事件的设计,例如准备要传输的包并调用 SetEvent
通知线程它已准备就绪,或者Martin James 建议的信号量和线程安全队列。
关于c# - 好的编码? (多个消息循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643706/