本人初学C#不久 目前做一个关于串口数据采集的东西(简言之,从串口读字符,分析出数据桢,提取有用数据桢,最后数据入库).
我为了提高实时性用了3条线程:
1、主线程(用来接收字符,将字符放入字符缓冲队列)
2、分析桢线程(用来提取字符缓冲队列中的字符,分析出数据桢,将桢放入桢缓冲队列)
3、数据分析线程(用来分析桢队列中的有效数据桢,并提取数据字段,存入数据库)通讯波特率为57600,桢长度在20~40不等,数据产生相当快。
请问各位打侠,我的3条线程的思路是否可取,并该设置接收门限多少,怎样同步线程,才既保证实时性又保证cpu资源消耗很低????????

解决方案 »

  1.   

    两条线程即可,接收数据和分析数据,分析后入队列,此外根据协议用byte[]操作,用string 会慢一些,可以的话用windows消息循环来保证数据的效率和可靠,或者用消息队列服务保证安全,读取资源会很小.
      

  2.   

    串口是异步的,所以收数据只是从缓冲区读数据而已,速度非常快,串口数据再快也快不过cpu,而且缓冲区还是很大的,稍微堆一点没有问题
    如果你的数据处理不是非常复杂,那么实时性是非常好的
    数据库的连接是很慢的,建议单独线程
      

  3.   

    谢谢各位大侠给面子,
    再问一下在数据分析线程里面可不可以用
    while(true)
    {
       if(bufferNotFull)
          sleep(100);
       else
          {
           //数据处理...
           }
    }
      

  4.   

    还有就是使用thread.Suspend();后怎么再用thread.Start();不能激活线程呢?(调试表明线程状态还是Suspended)
      

  5.   

    thread.Resume();方法也不能重庆启动线程(线程状态还是Suspended)。