我的想法
procedure TFrmCheck.tmr1Timer(Sender: TObject);
var
   i:integer;
   lsn,lzjmc,lIp :string;
begin
 for i:= 0 to self.fAvailabelSn.Count -1 do
    begin
      lsn := self.fAvailabelSn.Strings[i];
      lzjmc :=  self.fAvailableZjmc.Strings[i];
      lIp := self.FAvailableIP.Strings[i];      //多线程处理数据
      deal :=  dealData.Mycreate;
      deal.fsn := lsn ;
      deal.fip :=lIp;
      deal.fzjmc :=  lzjmc;
      deal.faddress := Gaddress;
      deal.ldate := vartodatetime(Copy(FData.Rcn.appserver.getsystime,1,10));      deal.Resume ;  
      end;
end;思路是这样的
每隔一定时间段,向所用的门禁发处一个外理指令第一 用的是timer
第二 用的是 循环
第三,在线程中我要不断的使用三层来读取数据和更新数据问题 
1. 思路是否有问题 
2. 在实际运行中会有多个线程 runnable,导致程序down掉
请问如何优化

解决方案 »

  1.   

    没看懂。
    TTimer 启动线程 最好加上线程互斥对象
      

  2.   

    用timer、用循环都没有问题。若要在三层中读取和更新数据,请在线程内建立独立的连接对象、数据集等,用完后就释放,因为delphi的这些对象都不是线程访问安全的。还有,在线程中访问全局对象或变量的问题,要注意访问冲突,看不到你的execute代码,所以不知道你是否做了处理。
      

  3.   

    如果每次执行的时间短,就用循环或Timer,如果执行的时间长,就用线程。
      

  4.   

    我己经调整了很多天了
    将对主窗品的vcl操作己由Synchronize 转为 onterminate中处理了
    将对硬件端口的操作也放在 synchronize 里了
    将对数据库的每一个操作也放在synchronize 里了现在问题变成了
    系统非常慢了
      

  5.   

    跑到10分钟,都出现
    thread creation 存储空间不足,无法处理命令