SPCOMM 只读首次数据,就停了,要STOPCOMM 再STARTCOMM 才继续读,再停止,再需要STOP 再START ...不断重复才可以有数据,为什么?

解决方案 »

  1.   

    问题解决了,原来ReadIntervalTimeOut 设得 500依然太小了.
      

  2.   

    即然问题解决了,那我将问题改为:
    procedure TfrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      wchb : String;
    begin
      wchb := PChar(Buffer);
      ...
    end;
    这样取数据效果好还是
    procedure TfrmMain.CommReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      tmparray:array[0..5000] of byte;
      i:integer;
      wchb:Ansistring;
    begin
      wchb:='';
      move(buffer^,PChar((@tmparray)^),bufferlength+2);
      for i:=0 to bufferlength-1 do
        begin
          wchb:=wchb+Chr(tmparray[i]);
        end;
    end;
    效果好?包括考虚内存的安全问题.
      

  3.   

    procedure TfrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      wchb : String;
    begin
      wchb := PChar(Buffer);
      ...
    end;这个好!