MSCOMM控件我用过好像实时性能不太好(OnComm事件重要加延时,否则会出错),我后来改用CSerialPort(),接口简单,效率高,尤其是接收,速度很快。可以用vc创建一个UI线程和一个WORKER线程,WORKER用来监测串口,又数据则通知UI。

解决方案 »

  1.   

    (1)128个串口估计够呛!
    (2)sendmessage,postmessage都要求窗口句柄,你要是能得到它们的窗口句柄就可以。
    (6)有串口消息来了会有消息的吧。
      

  2.   

    <<有串口消息来了会有消息的吧。是什么消息呀?
      
      

  3.   

    后台服务程序采用基于com的进程内dll,因为我觉得sendmessage,postmessage等时效性较差.
    同时操作128个串口也太多了吧!你打算用轮询还是开它128个线程?
      

  4.   

    是同时监控128个串口,初步打算开128个线程
    My God!
      

  5.   


    "每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行
     端口,必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地
     址和中断地址。"
                                     ------摘自《MSDN》
      

  6.   

    jsd198() :正在研究你的方案!谢谢!
      

  7.   

    接到串口信号后---〉创建新的工作者线程---〉打开串口----〉读串口----〉(一个线程)
    这样实时性不会太好,应
    1。事先打开这些通讯端口、创建通讯线程(工作者线程)和适当大小的缓冲区,其任务是监视串口,有数就读,存入缓冲区;
    2。数据分析线程也是工作者线程,不间断地监视缓冲区读这些缓冲区的数据;
    3。数据库线程(可以是你的主线程)负责将分析线程的结果存取数据库。
    这样做实时性较好,但是需要同步通讯线程和分析线程对通讯结果缓冲区的存取,分析线程和数据库库线程也需要对分析数据的存取建立同步机制。对串口的访问最好用重叠I/O(Overlapped I/O)。另外你一个进程产生130个线程将是对系统资源的严峻考验,建议一个通讯线程读好几个串口。
    总之巨复杂。
      

  8.   

    发贴子的朋友留下你的email吧!我正在学串口,以后好向你请教呢
      

  9.   

    [email protected]可不可以在一个进程内开128个线程?稳定吗?
      

  10.   

    在Windows中开那么多线程是比较不稳定的,在NT上可能行。串口速度也该考虑,如果9600的话,每一ms就有一个字节进帐,128个串口就有128个字节,你的程序能在1ms内处理128个串口吗?实时性是必须考虑的因素,所以我有上面讲的方案.
      

  11.   

    To horris(僧推月下门):前辈的方案是不错,就是实现太复杂了吧? 
    这是我第一次作多线程的程序。这是一个智能大厦的门控管理系统
    每个串口(大门)访问频率 10次---100次/小时,
    但只要有访问,就得在3--5秒内做出反应
      

  12.   

    如果我用轮询,是不是:后台进程()
    {
    ... ...初始化串口;for(PORT=1;PORT<=128;PORT++)
      {
        if(缓冲区里有字符)
    {
    处理信号();
    PORT++;
    }    
        else if(缓冲区里没有字符)
            { 
    PORT++;
            }
       }... ...}处理信号()
    {
       打开串口;
       读串口;
       分析数据;
       查询数据库;
       写串口;
       关闭串口;
    }一个菜鸟的问题:
    我怎么检测缓冲区里有没有字符,
    如果没有还要立刻返回?
      

  13.   

    不要一碰到多个状态的地方就多线程,在众多现成之间切换可能带来负面效果。要从时间反应和客观需要来决定是否及如何使用线程。比如 MS 的商业控件 MSComm,实际上副现成就是WaitCommEvent,然后PostMessage,其他所有动作都是在主县城去完成的,而往往很多程序员碰到这个问题时首先想到的就是主现成、发现成和接收现成。我认为你把Overlap的延时设置为0,只需要一个副现成对128个端口巡检就可以了。COM口115200都可以对付,门控应该不会有太高速率吧?!