问题描述
30路串口接收数据,开始每一个串口已经绑定串口事件,另外定义了一个类用来处理接收到的串口数据。程序启动时new了30个串口数据处理类的对象。问题:1)那接收端怎么用一个Datarecived事件区分哪个串口的啊?2)每个串口都绑定接收事件,这种情况下是不是相当于在程序开始就已经给每一个串口开辟了自己的内存数据处理空间,在开始阶段就实现了每一个串口的分流形式。因此接收时,每个口只是处理自己的,跟其他口的处理过程间无任何关系,完全独立?
解决方案
解决方案二:
在线等,希望哥哥姐姐们指点迷津
解决方案三:
Quote: 引用楼主zomyla的回复:
1)那接收端怎么用一个Datarecived事件区分哪个串口的啊?/quote]完全不知道你所谓“用一个Datarecived事件”是指什么具体意思。事件就是一个概念而已,要落实到你的事件处理程序方法上,还是要说明是一个还是多个的。你可以在你的所谓“串口数据处理类”上定义一个处理方法,例如publicclass串口数据处理方法{public串口数据处理方法(stringPort,intBaudRate,intStopBits,....){this.Port=Port,this.BaudRate=BaudRate;......}publicstringPort{get;privateset;}publicintBaudRate{get;privateset;}.......publicvoidDatarecived(objectsender,SerialDataReceivedEventArgse){.........}.....那么,你向每一个串口“绑定串口事件处理方法”时,自然就是使用30个不同的对象实例的Datarecived方法。这个方法内部当然知道自己的环境。
解决方案四:
引用楼主zomyla的回复:
2)每个串口都绑定接收事件,这种情况下是不是相当于在程序开始就已经给每一个串口开辟了自己的内存数据处理空间,在开始阶段就实现了每一个串口的分流形式。因此接收时,每个口只是处理自己的,跟其他口的处理过程间无任何关系,完全独立?所以面向对象地设计你的“串口数据处理类”,使得与特定(单个)串口有直接关系的操作、缓存、空间等等任何需要封装在一起的设计独立出来,然后用到程序各种地方、其它工程中,不论是操作1个串口还是20个串口都是简单地使用这个类,这就是很好的事情。
解决方案五:
所以面向对象地设计你的“串口数据处理类”,使得与特定(单个)串口有直接关系的操作、缓存、空间等等任何需要封装在一起的设计独立出来,然后用到程序各种地方、其它工程中,不论是操作1个串口还是20个串口都是简单地使用这个类,这就是很好的事情。
使得与特定(单个)串口有直接关系的操作、缓存、空间等等任何需要封装在一起的设计独立出来,,意思就是说每一个串口都有自己的操作、缓存、空间等,这样的话多串口同时处理时不是很耗内存吗?
解决方案六:
还有一个问题是,30个串口,应该有30个接收线程吧?然后接收线程里有:1)断帧数据处理线程,2)异步调用写文件线程写文件(“串口数据处理类”中包含了写文件的操作)3)解析线程这样的话,30个串口同时打开处理数据,这里面不是有上百个线程了吗?
解决方案七:
请老师继续指点
解决方案八:
接收数据的函数的sender就是各自的SerialPort对象,强制转换一下就好.
解决方案九:
引用7楼tcmakebest的回复:
接收数据的函数的sender就是各自的SerialPort对象,强制转换一下就好.
那对于这几个问题的解决方案呢?还有一个问题是,30个串口,应该有30个接收线程吧?然后接收线程里有:1)断帧数据处理线程,2)异步调用写文件线程写文件(“串口数据处理类”中包含了写文件的操作)3)解析线程这样的话,30个串口同时打开处理数据,这里面不是有上百个线程了吗?
解决方案十:
在线等,对于下面的那几个问题正在迷惑中,继续解答
解决方案十一:
不知道是不是用哪个Objectsender来判断
解决方案十二:
怎么没人结贴了呢,上面那几个问题很迷惑呢