主  题:  [关于串口问题]这个问题我没法调试,想请教大家,串口发送程序终止的原因?  
   
首先感谢:aiirii(ari-淘金坑)  (  )    帮我解决了上一个串口的问题。  
 
我的程序中有一个连续向串口发送帧的功能,那是一个TIMER控件控制的,但是当TIMER所在的窗体  
不是焦点的时候,换成其他有些(不是全部)窗体在最前面时,TIMER函数继续执行,但是在TIMER函数中调用的发送串口数据的函数出了问题,该函数是自定义的,在下面有  
TIMER在主窗体中,当打开和主窗体同在一个工程的窗体时,发送串口的函数就会停止。谁能告诉我这是什么原因呢,如何修改程序结构  
 
 
程序设计如下:  
//DM    数据窗体;  
COMM1:SPCOMM  
beingwriteflag:BOOLEAN//串口占用标志  
//里定义了串口接受数据的函数  
 
//mainfrm  主窗体  
 
cmdtosinglechip//串口向单片机发送命令的函数  
begin  
if  beingwriteflag  =  false  then//检查标志如果如果占用就退出  
     beingwriteflag:=true  
     else  
     exit;  
 
repeat  
 
DM.Comm1.writecommdata()//向串口写信息  
 
while  (GetTickCount  -  XXX)  <  300  do  //等待串口回应,修改状态标志  
     Application.ProcessMessage;  
 
end  
 
TIME3:=TIMES+1;  
 
UTILL    TIMES=3;  
       
 
 
beingwriteflag:=false;//修改串口占用标志  
 
TIMER1TIMER//时间空间函数,设置时间为300毫秒;  
                           //我调试的时候发现TIMER是一直运行了的,但是beingwriteflag  一直为TRUE。  
 
begin  
 
if  beingwriteflag  =  false  then  //如果串口不被占用    
cmdtosinglechip;  
 
end  
 
//managefrm    //和mainfrm同在一个工程的窗体  
  
,。,。  
 
 
当打开和mainfrm同在一个工程的窗体的时候,cmdtosinglechip就可能停止了,  
里面的beingwriteflag  一直为true,知道刚才打开的窗体关闭的时候才继续运行。。  
打开不同在一个工程的窗体就不会出现这样的现象  
 
这是为什么呢?  
如何修改,谢谢   

解决方案 »

  1.   

    >>当打开和mainfrm同在一个工程的窗体的时候,cmdtosinglechip就可能停止了,  
    如果打开的是 Modal 形式的,如: XXXForm.ShowModal ,就可能会出现,但不是绝对的所以,如果想做一个比较稳定的通信,一般,要将通信部分写到线程中。如果你是spcomm控件,那已经是线程乐
      

  2.   

    我改成了5秒中触发一次TIMER
    很奇怪,这样就不卡了
    是不是因为SPCOMM线程以前一直都争取不到CPU运行时间
    因为TIMER只有300毫秒
    SPCOMM线程优先级别低呀