当前位置:编程学习 > C#/ASP.NET >>

循环采集串口数据除了timer来循环,还有什么方式实现循环?

本人正在采集4台设备,每台需要先发送一个特定指令,然后接受,然后再给下一个发送,再接受,这样一直循环下去。
现在用 timer 实现循环,但是本人也清楚 timer 的弊端。

不知道还有什么方式可以进行循环,难道写 for 语句吗?

--------------------编程问答-------------------- 使用线程 --------------------编程问答-------------------- 好象只有用TIMER
using System;
public class MyClass
{
 public static void Main()
 {
  System.Threading.Timer timer = new System.Threading.Timer(delegate(object state){------);},null,0,100);
  while(true)
   Console.ReadLine();
 }
}  --------------------编程问答-------------------- serialport类datareceived事件不用timer吧 --------------------编程问答-------------------- 因为我需要 给每个机器发送 指令,才能采集一次数据,需要 不停的给每台机器发送指令

如果用线程的话,是不是里面的循环 还是用 for 来实现的??

datareceived 我会用到的,我的情况比较特殊,每个机器的 datareceived 值还不一样,所以循环的时候还要不停的修改 datareceived 值。

我的意思,要循环的话,除了 datareceived 出发意外,是不是就是用 for 来循环?? --------------------编程问答-------------------- 我都是用timer采集。。。
请问timer有什么弊端? --------------------编程问答-------------------- 弊端1:timer 的弊端是 需要规定一个间隔时间,调试这个 timer 的时间比较费劲。
弊端2:在有些需要告诉采集的时候,timer 的微妙 不能满足需求了。

我希望有一种循环方式,就是一直顺的处理,采集一个,收集一个,再继续采集下一个。 --------------------编程问答--------------------
引用 6 楼 yanerweb2 的回复:
弊端1:timer 的弊端是 需要规定一个间隔时间,调试这个 timer 的时间比较费劲。
 弊端2:在有些需要告诉采集的时候,timer 的微妙 不能满足需求了。

 我希望有一种循环方式,就是一直顺的处理,采集一个,收集一个,再继续采集下一个。

哥们,你想的这种方法叫轮询。。。 --------------------编程问答-------------------- datareceived 跟机器返回值不相干吧,你这么多设备肯定不止一种类型。但是协议肯定是一样的,你如果是因为想分辨出哪个数据是哪个设备返回的、是何种数据的话,你肯定要有协议的呀,根据协议来解析从串口缓存区读取的数据。这样,你就不需要一个接一个的获取了。我感觉你的通信里好像没有做协议,或者做了协议,你没有解析。地址、设备类型、用户数据、校验码肯定要有的吧,要不这485总线上还不乱了套了。。。
--------------------编程问答-------------------- 恩,是特殊情况(设备的单片机程序已经是固定的了,是不能修改的了。)
,可以理解为没有协议,只能靠 PC 的程序 去一个采集号了,再去采集下一个。
这种轮询只能用 while 或 for 了吧??

--------------------编程问答-------------------- 你是每个设备都对应一个RS232的话,用线程就行。要是N个RS485接在一个RS232上的话还是for轮询吧 --------------------编程问答-------------------- "你是每个设备都对应一个RS232的话,用线程就行。"

您说的 用线程就行,我不大明白? 线程用的话 就不用写 while 或 for 了吗?

还是说,c# 里面的线程 有 “循环”的功能,是怎么写代码那?? --------------------编程问答-------------------- 我的意思是说,由于你每个串口收发数据的延时等不一样,可以建一个线程池,每一个线程对应一个串口的工作。 --------------------编程问答--------------------
引用 12 楼 wdgphc 的回复:
我的意思是说,由于你每个串口收发数据的延时等不一样,可以建一个线程池,每一个线程对应一个串口的工作。

他的意思是你每个设备对应一个串口。。。。
如果你是通过485总线接到计算机的232上的话,你只有轮询。 --------------------编程问答-------------------- 兰州看明白了没? --------------------编程问答-------------------- 使用线程
多线程了! --------------------编程问答-------------------- timer吧。


其它的都都弯路了 --------------------编程问答-------------------- Datarevice事件感觉还比较好用的 --------------------编程问答-------------------- while(true){}

do{} while(true)

for(int i=0;i<int.MaxValue;i++)
{
//........
if(i==int.MaxValue) i=0;
}
--------------------编程问答-------------------- 網上找找  委託事件 的用法吧。 --------------------编程问答-------------------- 怎么也憋用 for啊


while(running)
{
  ……
  ……
  Sleep(20);
}
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,