现在的问题是应该怎样接收数据呢?我以前只用过一个串口,就是让程序傻等着把数据接收完然后再处理;现在两个设备的话好像就不能这样了,要是等着接收完一个设备的数据,另一个设备发送的旧数据还没接收就被新数据覆盖了。还有个问题就是要是程序一直占用大量时间来接数据是不是就没空处理了啊?
我想能不能新建两个线程来监控两个串口,然后通过触发事件来中断接收数据,主线程就进行处理。这样可以吗?
因为之前没接触过。。。 小白了请多包涵~~
另外有没有这方面的范例程序啊,能不能提供一下。
请大家帮帮忙,谢谢啦~
18 个解决方案
#1
可以用waitcommevent来做..........
#2
向这样的问题,一般都是用线程来接收数据的。至于数据的处理,一般也不会交给主线程,而是交给另外一个数据处理线程来执行,否则主线程会假死。主线程的主要工作是展示接收到的内容,进行必要的用户展示和交互。
#3
关于多线程和串口通信方面的代码,我想codeproject和许多中文源码网站上都有许多成熟的例子。
#4
谢谢LS二位
我找找源码看
我找找源码看
#5
对每一个串口创建一个线程,不停的监视串口进行读写
#6
再问一下额,
对每一个串口创建一个线程来监控能不能提高CPU的利用率呢?
比方说我要是一直等一个串口发送完20字节数据的话就需要20*12字节*8位/9600bps = 0.2s
用线程来接收数据的话是不是占用cpu的时间会变少啊?
对每一个串口创建一个线程来监控能不能提高CPU的利用率呢?
比方说我要是一直等一个串口发送完20字节数据的话就需要20*12字节*8位/9600bps = 0.2s
用线程来接收数据的话是不是占用cpu的时间会变少啊?
#7
这个好像不会。该花的时间和资源还是要花的。
#8
那如果花的时间也一样,有啥好处呢。。。。
#9
好处前面好像已经说过了啊......
#10
每个任务的时间不会减少,但不是说整个任务的时间不会降低啊。单线程时,每个任务排队处理;多线程时,这些任务可以同时处理,整个任务的时间是降低的,但单个任务是不会有很大变化的。就比如迅雷这样多线程下载,假设分成三个线程下,每个线程下33.3%的数据,那么,三个线程的工作时间可以等于所有数据的下载时间,但由于并行处理,所以整个文件的下载时间就和一个线程的运行时间大致相同,那不就是节省了2/3的时间么。
#11
再打个更容易懂的比方。如果你一个人干3个人日的工作,你需要三天时间;假设有水平相当的三个人一起干,那么可能只需要一天左右。虽然整个工时没有变化,还是3个人日,但这个工作完成的时间却减少了2天啊。
#12
就是防止主线程假死是吧?
那我可不可以这样理解,就是如果用主线程接收数据的话,0.2S内主线程就死在那里等数据
如果用另一个线程接收数据的话,这0.2S内接收数据的间隙主线程还能工作?
那我可不可以这样理解,就是如果用主线程接收数据的话,0.2S内主线程就死在那里等数据
如果用另一个线程接收数据的话,这0.2S内接收数据的间隙主线程还能工作?
#13
啊,线程是并行运行啊。。。
我以为同一时间只能有一个线程运行……
我以为同一时间只能有一个线程运行……
#14
是不是用2个串口控件,利用多线程对2个串口进行读写操作。没做过2个的,帮顶
#15
就是说接收数据的线程和处理数据的线程可以同时运行吗?
#16
用线程来接收数据,用2个串口控件,利用多线程对2个串口进行读写操作。至于数据的处理,一般不交给主线程,而是交给另外一个数据处理线程来执行,否则主线程会假死。主线程的主要工作是展示接收到的内容,进行必要的用户展示和交互。
#17
我现在最想知道的就是采集数据的线程工作时,处理数据的线程能不能同时工作?
比如说采集数据一共用了0.2S,但是实际只占用了0.05S的CPU时间,还有0.15S是处理数据的线程在使用CPU,这样虽然要用0.2S来接收数据,但是1S内还是有0.95S的时间CPU是在处理数据,这种说法对的吗?
比如说采集数据一共用了0.2S,但是实际只占用了0.05S的CPU时间,还有0.15S是处理数据的线程在使用CPU,这样虽然要用0.2S来接收数据,但是1S内还是有0.95S的时间CPU是在处理数据,这种说法对的吗?
#18
帖子沉了,一直没看到。你说的是对的。线程从逻辑上看,是并行的,就是说各自不相干。
#1
可以用waitcommevent来做..........
#2
向这样的问题,一般都是用线程来接收数据的。至于数据的处理,一般也不会交给主线程,而是交给另外一个数据处理线程来执行,否则主线程会假死。主线程的主要工作是展示接收到的内容,进行必要的用户展示和交互。
#3
关于多线程和串口通信方面的代码,我想codeproject和许多中文源码网站上都有许多成熟的例子。
#4
谢谢LS二位
我找找源码看
我找找源码看
#5
对每一个串口创建一个线程,不停的监视串口进行读写
#6
再问一下额,
对每一个串口创建一个线程来监控能不能提高CPU的利用率呢?
比方说我要是一直等一个串口发送完20字节数据的话就需要20*12字节*8位/9600bps = 0.2s
用线程来接收数据的话是不是占用cpu的时间会变少啊?
对每一个串口创建一个线程来监控能不能提高CPU的利用率呢?
比方说我要是一直等一个串口发送完20字节数据的话就需要20*12字节*8位/9600bps = 0.2s
用线程来接收数据的话是不是占用cpu的时间会变少啊?
#7
这个好像不会。该花的时间和资源还是要花的。
#8
那如果花的时间也一样,有啥好处呢。。。。
#9
好处前面好像已经说过了啊......
#10
每个任务的时间不会减少,但不是说整个任务的时间不会降低啊。单线程时,每个任务排队处理;多线程时,这些任务可以同时处理,整个任务的时间是降低的,但单个任务是不会有很大变化的。就比如迅雷这样多线程下载,假设分成三个线程下,每个线程下33.3%的数据,那么,三个线程的工作时间可以等于所有数据的下载时间,但由于并行处理,所以整个文件的下载时间就和一个线程的运行时间大致相同,那不就是节省了2/3的时间么。
#11
再打个更容易懂的比方。如果你一个人干3个人日的工作,你需要三天时间;假设有水平相当的三个人一起干,那么可能只需要一天左右。虽然整个工时没有变化,还是3个人日,但这个工作完成的时间却减少了2天啊。
#12
就是防止主线程假死是吧?
那我可不可以这样理解,就是如果用主线程接收数据的话,0.2S内主线程就死在那里等数据
如果用另一个线程接收数据的话,这0.2S内接收数据的间隙主线程还能工作?
那我可不可以这样理解,就是如果用主线程接收数据的话,0.2S内主线程就死在那里等数据
如果用另一个线程接收数据的话,这0.2S内接收数据的间隙主线程还能工作?
#13
啊,线程是并行运行啊。。。
我以为同一时间只能有一个线程运行……
我以为同一时间只能有一个线程运行……
#14
是不是用2个串口控件,利用多线程对2个串口进行读写操作。没做过2个的,帮顶
#15
就是说接收数据的线程和处理数据的线程可以同时运行吗?
#16
用线程来接收数据,用2个串口控件,利用多线程对2个串口进行读写操作。至于数据的处理,一般不交给主线程,而是交给另外一个数据处理线程来执行,否则主线程会假死。主线程的主要工作是展示接收到的内容,进行必要的用户展示和交互。
#17
我现在最想知道的就是采集数据的线程工作时,处理数据的线程能不能同时工作?
比如说采集数据一共用了0.2S,但是实际只占用了0.05S的CPU时间,还有0.15S是处理数据的线程在使用CPU,这样虽然要用0.2S来接收数据,但是1S内还是有0.95S的时间CPU是在处理数据,这种说法对的吗?
比如说采集数据一共用了0.2S,但是实际只占用了0.05S的CPU时间,还有0.15S是处理数据的线程在使用CPU,这样虽然要用0.2S来接收数据,但是1S内还是有0.95S的时间CPU是在处理数据,这种说法对的吗?
#18
帖子沉了,一直没看到。你说的是对的。线程从逻辑上看,是并行的,就是说各自不相干。