主要的模式如下:
  procedure TForm1.过程1
  begin
   过程2;
  end;
  
  procedure TForm1.timer1timer(Sender:TObject);
  begin
   .....
   过程1;
  end;  procedure TForm1.Vacomm1RxChar(Sender:TObject;Count:integer);//一个串口触发程序
  begin
   ...
   Timer1.Enabled:=true;
  end;我希望将串触发中的程序写成线程,这样有数据传来时,作其他操作时不会很慢。请问这个该如何写?谢谢!

解决方案 »

  1.   

    串口的接收是吧?在这里,不要考虑用Timer去轮询,考虑用Windows消息,通过截获windows消息来判断有没有数据可以接收。可以参考spcomm控件。
      

  2.   

    開啟一個標準THREAD就可以,然後對VCL同步操作,不會很慢,比使用TIMER快很多!
      

  3.   

    谢谢以上两位的回答! 我是要将串口接收到的数据,在程序中查找,然后通过一个timer来不停地将数据显示出来。
      

  4.   

    请问如果一定要用到timer,该怎么写?
      

  5.   

    var tid:DWORD;CreatThread(nil,0,@函数名,nil,0,tid);
      

  6.   

    对不起,上一个打错了var tid:DWORD;CreateThread(nil,0,@函数名,nil,0,tid);
      

  7.   

    谢谢! 不过,我不知道应该将timer1.enabled:=true写到进程里,还是把上面的过程1写到进程里呢?很模糊
      

  8.   

    你不就是想解决慢的问题吗?
    数据到来时,创建一个thread,负责数据处理,然后主线程就仍然可以接收其他消息了.
    不要用timer.解决不了你的问题的.
      

  9.   

    用Timer的目的:数据接收来之后,在图片上找出位置,然后在这个位置上不停的画图片。(有警报来之后,在建筑图上找到报警的位置,然后就用一个明显的图像表示出来)
      

  10.   

    首先你要明确慢的原因:到底是因为用了timer还是其他原因。
    而且在线程中调用过程和函数都不能带参数的,你的程序适合吗?