我再使用SUN的串口包进行串口通信的时候遇到一个十分郁闷的问题,如果哪位高人能给解决的话我可以另开帖子给你加分。    我的问题是这样,我采用一个线程负责数据的接收(用串口类获取InputStream,然后调用其read()方法即可),另一个线程负责数据的处理,两者之间用“生产者-消费者”模式运行。
    Thread t = new Runnable(){
    public void run(){
        int data = 0;
        while( true){
          int data = inputStream.read();
          if( data ==-1)//数据接收完
             break;
          
          //以下是其他处理过程
          
        }
    });
    然而在串口返回数据的速率很快的时候,上述循环中接收数据的速率远远小于串口收到的数据的速率,这就导致另一个线程的工作远远滞后于实际,而我的应用偏偏又是实时系统,不能忍受这样的滞后,请问高人,如何提高数据接收的速率.如果你的答案有贡献,我是不吝惜分述的。可以另开帖子加分

解决方案 »

  1.   

    "上述循环中接收数据的速率远远小于串口收到的数据的速率" ??
    这是什么意思啊?你的2个线程不是一个是接受线程,一个处理线程吗?有些不明白你的意思。如果说要提高/降低read速度,可以尝试增加/减少读入缓冲区的大小(减少/增加循环read次数)来实现。
      

  2.   

    我可能表达的不太明了,我的实验是:我的传感器节点通过串口返回数据,应该在30秒内返回大概4900个字节,然而我在实验中使用了两种方法,一种是通过实现"SerialPortEventListener"接口,并在public void serialEvent(SerialPortEvent e)中处理收到的字节,但是这样做经我实验只能收到1400个字节左右,其他字节不知道跑哪里去了。第二种就是我现在用的方法,用一个线程专门负责接收字节,但是收到全部4900个字节的时间远远大于30秒,这在我的实时系统中是不可忍受的。况且就算我去掉了其中的处理过程也不能有效地提高接收速度,我很不理解,不知道哪里出问题,希望高人指点。