不复杂的功能
原代码 
procedure TForm1.MSComm1Comm(Sender: TObject);
begin
jxf:=comthread.Create(false);
end;
以上是如果COM口内容改变,就创建一个线程
以下是线程内的
procedure comthread.Execute;
begin
freeonterminate:=true;if form1.mscomm1.Input='***' then
   form1.mscomm1.Output:='OK'
else
   form1.mscomm1.Output :='NO' ;
end;
如果是某个值就发送OK否则就NO
可是发送的是OKNO或NONO
跟踪了一下jxf:=comthread.Create(false);被执行了两遍
所以线程被创建了两次????
请各位大侠指点

解决方案 »

  1.   

    MSComm1Comm(Sender: TObject),
    事件一旦有数据就触发
    如果是通讯的话有时有握手信息或拨号信息或状态信息进入就可能触发多次
      

  2.   

    DWGZ()兄
    小弟初学,在有代码只是我用来说明情况的。
    我以后一定努力。
    yesxwl()兄
    握手信息或拨号信息或状态信息进入,串口的内容都会改变吗?有没有好的解决方法
    shuixin13(犬犬(心帆))兄
    要用到(猫池)16个串口
    我用了16个MSCOMM控件
    如果串口的内容改变就开个线程
    我的思路是这样的,程序还没做,现在只是想把功能调出来
      

  3.   

    ComEvCD: begin在接通之后在此事件中清除所有的返回信息,置位真正接收标志
                   SuccessFlag.SetEvent;               LblStatu.Caption:='连接成功';
                   BtnOutput.Enabled:=True;           //允许输出指令至对方MODEM
                   Sleep(1000);
                   MSComm1.InputLen:=0;
                   inputResult:=MSComm1.Input;         //清空输入缓冲区;
                   InputStr:=InputResult;               MSComm1.InputLen:=1;               MSComm1.Output:='B';               //查询指令;
                   sleep(100);               StartReceive:=True;                //开始接收数据标志
                   Count:=1;
                   AccountStr:='';                 //初始化流量数据字符
                   FlowStr:='';
                   PressureStr:='';
                   end; comEVReceive: begin                    LblStatu.Caption:='接收数据';
                        InputStr:=MSComm1.Input;
                        BtnBreak.Enabled:=True;
                        MemoData.Lines.append(InputStr); //接收到数据,>RThreshold                    if StartReceive then //在此判断是否是真正的数据
                        begin
                          chr:=Pchar(InputStr)^;