CnPack Forum


 
Subject: 发现编辑器扩展的一个问题,不知该如何解决
littlerain
新警察
Rank: 1



UID 210
Digest Posts 0
Credits 43
Posts 30
点点分 43
Reading Access 10
Registered 2003-11-3
Status Offline
Post at 2006-5-22 22:51  Profile | Blog | P.M. 
发现编辑器扩展的一个问题,不知该如何解决

在CnPack中,编辑器扩展专家在BDS2006下存在一个问题,就是当在IDE中编辑过代码之后,如果关闭所有项目,然后打开IDE的option,或者about窗口都会使得IDE所在的进程的cpu占用率非常高,系统变很慢。
    经过从下载CnWizard最新的0.7.9.194源码,并调试分析后,发现问题出在Utils\CnEditControlWrapper.pas中,这里面的TCnEditControlWrapper包装了IDE本身的
EditControl。
    而TCnEditControlWrapper.OnIdle()事件的处理代码中调用了GetEditorContext(),
如果GetEditorContext()当关闭所有编辑器之后被调用的话,就会抛出AccessViolation异常,
经过单步调试发现,实际上是这个时候EditView发生了变化,这个时候EditView.Buffer=nil,
所以访问EditView.Buffer.GetCurrentDate会抛出AccessViolation异常,
同时,访问EditView.Block似乎也会抛出AccessViolation异常。
    由于OnIdle事件被不停的调用,并且OnIdle事件的代码中不断的调用GetEditorContext(),
所以导致不断的抛出异常,从而导致cpu占用率非常高,IDE反应非常慢。
    所以,我想问题可能出在当IDE中所有的EditControl被关闭后(实际上应该是被隐藏了),
EditView不知道发生了什么变化,而TCnEditControlWrapper又没有及时收到更新通知,从而导致访问异常。
    小弟水平太差,一直想不到有什么好方法能够解决这个问题,期待CnPack早日解决这个问题。大家也来一起想想办法吧,为CnPack进步贡献一把力。
Top
shenloqi
灌水处处长
Rank: 4



UID 34
Digest Posts 1
Credits 287
Posts 179
点点分 287
Reading Access 10
Registered 2003-3-15
Status Offline
Post at 2006-5-30 09:28  Profile | P.M. 
procedure TCnEditControlWrapper.OnIdle(Sender: TObject);
var
  i: Integer;
  Context, OldContext: TEditorContext;
  ChangeType: TEditorChangeTypes;
begin
  for i := 0 to EditorCount - 1 do
  begin
    //应该只要加上这段就可以了吧,Buffer都是nil了的话就应该不需要处理了吧
    if Editors[i].FEditView.Buffer = nil then
      Continue;
Top
my58876448
普通灌水员
Rank: 2



UID 2118
Digest Posts 0
Credits 58
Posts 58
点点分 58
Reading Access 10
Registered 2006-4-20
Status Offline
Post at 2006-5-31 08:34  Profile | Blog | P.M. 
支持,加油

Top
littlerain
新警察
Rank: 1



UID 210
Digest Posts 0
Credits 43
Posts 30
点点分 43
Reading Access 10
Registered 2003-11-3
Status Offline
Post at 2006-5-31 23:32  Profile | Blog | P.M. 
to shenloqi:
   我试过加上这句话,但是问题在于这个时候访问FEditView.Buffer就会引发异常,也就是这个if判断的时候就引发异常了,而FEditView这个时候又不是nil,不知道指到了哪里
Top
 




All times are GMT++8, the time now is 2024-9-20 07:51

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.006555 second(s), 8 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP