起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: xhsoft

增加功能到平台**

[复制链接]
 楼主| 发表于 2009-3-14 14:42:36 | 显示全部楼层
procedure TYWGN3.FuncDestroy(Sender: TObject);
begin
   lTimer.Free;
   lContextCurrent.Free;
   DataSetBroker1.Free;
   lInfoBroker.Free;
   lBizClassURL.Free;
end;

110楼,为什么这段没有执行,
回复 支持 反对

使用道具 举报

发表于 2009-3-14 15:07:08 | 显示全部楼层
怎么知道这个没有执行?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-14 15:09:54 | 显示全部楼层
我设置了断点,跟踪发现没有执行
回复 支持 反对

使用道具 举报

发表于 2009-3-14 15:18:54 | 显示全部楼层
那你注释掉 dorun里面的 lTimer.Enabled :=True;
如果触发了,就是计时器影响了释放。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-14 15:37:28 | 显示全部楼层
注掉了
但是也没有执行
回复 支持 反对

使用道具 举报

发表于 2009-3-14 17:25:44 | 显示全部楼层
楼主,跟你说一下,FuncDestroy这个事件只有在功能退出时方可触发。
回复 支持 反对

使用道具 举报

发表于 2009-3-15 19:14:01 | 显示全部楼层
楼主,我把上面的告诉你的代码改了改,好像就可以了
标准风格主窗体的代码照旧
那个自动运行的功能的代码看下面
procedure TZDZXBDZCT.DoRun;
begin
  lTimer :=TTimer.create(nil);
  lTimer.Enabled :=False;
  lTimer.Interval :=10000;
  lTimer.OnTimer :=OnTime;
  lTimer.Enabled :=True;

end;

procedure TZDZXBDZCT.Ontime(Sender: TObject);
begin
  lTimer.Enabled :=false;

  try
    (*把这些对象的Create放到了这里*)
    lBizClassURL := TBizClassURL.Create;
    lInfoBroker := TInfoBroker.Create(Self);
    DataSetBroker1 := TDataSetBroker.Create(nil);
    lContextCurrent := TContextCurrent.Create(Context);

    lBizClassURL.BizURL.URL := 'Biz:\COLLABORATION\BIZBASEINFO.INFO';
    lInfo := Context.GetBizObject(lBizClassURL) as TInfo;
    lInfoBroker.AutoBroker := False;
    lInfoBroker.Info := lInfo;
    DataSetBroker1.InfoBroker := lInfoBroker;
    DataSetBroker1.DataSetID :='BizTaskData';
    TSQLDataSet(DataSetBroker1.DataSet).Open;
    TSQLDataSet(DataSetBroker1.DataSet).Append;
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FPartyID').AsString := jscommon.CreateGUIDStr;
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FPARTYNAME').AsString := jscommon.CreateGUIDStr;
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FBizType').AsString := 'WORKTASK';//类型************
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FDealDate').AsDateTime := Business.Data.SysSrv.SysService.Time;
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FAssignTime').AsDateTime := Business.Data.SysSrv.SysService.Time;
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FBeginDate').AsDateTime := Business.Data.SysSrv.SysService.Time;
    TSQLDataSet(DataSetBroker1.DataSet).FieldByName('FTopic').AsString :='自动生成工作任务test';
    DataSetBroker1.DataSet.FieldByName('FDealDept').AsString := lContextCurrent.Dept.ID;
    DataSetBroker1.DataSet.FieldByName('FDealPtm').AsString := lContextCurrent.PositionMember.ID;
    DataSetBroker1.DataSet.FieldByName('FDealMan').AsString := lContextCurrent.Operator.ID;
    TSQLDataSet(DataSetBroker1.DataSet).ApplyUpdates;

    (*把这些对象的free放到了这里*)
    lContextCurrent.Free;
    DataSetBroker1.Free;
    lInfoBroker.Free;
    lBizClassURL.Free;
  except
    lContextCurrent.Free;
    DataSetBroker1.Free;
    lInfoBroker.Free;
    lBizClassURL.Free;
  end;
  lTimer.Enabled :=True;

end;

procedure TZDZXBDZCT.FuncDestroy(Sender: TObject);
begin
  lTimer.Free;
end;
-------------------------------------
注销和退出不会报指针错了,也实现了你的需求。
[B]但是[/SIZE] [/B] ,请楼主要注意,这样的代码放在了客户端执行,那么每个人登陆都会定时触发产生这样的任务,且定时器设的尽量不要太频繁,否则效率很低,对服务器压力也大。
(比如:lTimer.Interval :=10000;  这相当于是10秒触发一次)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-16 08:46:21 | 显示全部楼层
(*把这些对象的free放到了这里*)
    lContextCurrent.Free;
    DataSetBroker1.Free;
    lInfoBroker.Free;
    lBizClassURL.Free;
  except

放在这里的话,启动平时就会报错
回复 支持 反对

使用道具 举报

发表于 2009-3-16 08:53:02 | 显示全部楼层
报什么错呢?
(上面的代码我是在本机上做过测试的,没有问题。)
你那个定时器设的多长时间?跟你说了,这个代码是放在了客户端执行,所以并发量大的时候可能存在问题。你具体是怎么测试报错的呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-16 09:04:18 | 显示全部楼层
1秒

我这边代码和你写的不一样,能否远程看一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-24 12:14 , Processed in 0.041554 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表