开辟多个串口,假如一个串口接收到数据,接着将数据到SQL SERVER查找有没重复数据,没有就插入,并根据情况回复下位机。由于带宽的问题,往往处理SQL处理的时间有时占到4-5秒。但是下位机是发出数据包1秒后接收不到回复就重发。这样会造成串口缓存区乱。现在想在串口处理的线程里再开一个数据库处理的线程。应该怎么弄??需要注意些什么??谢谢。。

解决方案 »

  1.   

    如果一定要用数据库,那么逻辑上,可以把串口当成一个UDP协议的客户端。逻辑上,主机必须辨别客户端发送的数据是否是一个已经接收的数据,如果是一个已经接收的数据,则遗弃。你可以参考以下RADIUS协议中客户端和服务器是如何通讯的。
      

  2.   

    我来说种思路:
    你弄个全局的队列,有且仅有一个 ,g_List;
    在开两个线程, ReadFromCom , WirteToDB
    ReadFromCom 就把从串口读到的数据,直接存入g_List , 写完g_List ,就马上回复下位机
    WirteToDB  读g_List,如果有数据,按照你的逻辑 ,判断是否往数据库写。
    记住 ReadFromCom 和 WirteToDB 操作 g_List 要加锁 ,否则乐子可大了。
      

  3.   

    我其实是使用现在用得比较多的cncomm那个类。最近好像又发现了问题,就是如果虚拟多个串口,大概如果有30多个,那样会不会有问题。前天软件不知为什么出现了“程序未响应”的错误提示,后来重启了软件就好了,不知是不是串口线程的问题。