一个程序假死现象

taohua300 2011-04-17 01:08:22
http://access911.net/csdn/FileDescription.asp?mdb=2011-4-17&id=10
ttt类是由表单ttt另存过来的,在ttt表单中使用了工具条控件。
然后在表单2中使用这个类,结果可以显示,但关闭表单的时候就假死,CPU 使用率100%。
但如果通过ttt表单中没有工具条控件,另存为类的时候则不存在问题。
...全文
175 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
都市夜猫 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 taohua300 的回复:]
奇怪,我把QueryUnload的代码写到thisform.release之前就不行,调用thisform.QueryUnload就可以
[/Quote]
不可能吧,注意下是否犯了低级错误
复制代码的话,应该将 This 改成了 Thisform
taohua300 2011-04-20
  • 打赏
  • 举报
回复
奇怪,我把QueryUnload的代码写到thisform.release之前就不行,调用thisform.QueryUnload就可以
都市夜猫 2011-04-19
  • 打赏
  • 举报
回复
加上手工释放对象的代码应该可以吧
cmd.Click 中这样:

Thisform.QueryUnload()
Thisform.Release()
taohua300 2011-04-19
  • 打赏
  • 举报
回复
又发现一个问题,在表单2中加一个按钮,写上 rele thisform
点击这个按钮的时候不管通过什么方式运行这个表单,都有假死现象。及时在rele thisform之前加上释放对象的代码也不行。
taohua300 2011-04-18
  • 打赏
  • 举报
回复
我的是sp1 3504 汉化版

不能退出的情况出现在运行表单2之后,然后关闭vfp出现提示
都市夜猫 2011-04-18
  • 打赏
  • 举报
回复
试了下,没有出现不能退出 vfp 的情况
我的 vfp9 版本是 sp2 5815
taohua300 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 apple_8180 的回复:]
类中用到了 Read Events ?
[/Quote]

没有,我只加了个工具条控件,设置了表单和工具条的几个属性
十豆三 2011-04-18
  • 打赏
  • 举报
回复
类中用到了 Read Events ?
taohua300 2011-04-18
  • 打赏
  • 举报
回复
加上2楼代码的时候关闭表单的时候可以了,但关闭表单后再关闭vfp的时候提示不能退出vfp

upload事件加上clear events也不行
必要要加上
clear events
quit
才行
taohua300 2011-04-18
  • 打赏
  • 举报
回复
本来是想做一个类似QQ聊天窗口的东西,上面是记录,下面用来输入内容,这两个东西都用RichTextBox控件,中间做一个工具条用来设置字体大小,颜色等,不过这个工具条不太好弄,如果用button,不太好看,突然想到以前看到过版主的博客里有这么一个例子,模仿了一下
WWWWA 2011-04-18
  • 打赏
  • 举报
回复
不错,学习了,按1楼代码 ,问题解决没有
都市夜猫 2011-04-18
  • 打赏
  • 举报
回复
呵呵,难怪看上去有些眼熟呢
不过这个示例表现出的问题是嵌入 ole 控件后发生的,与可滚动容器无关
试着注释掉嵌入表单的语句,排除嵌入因素后,问题依然存在:
Thisform.AddProperty('oScrollCnt', NEWOBJECT('ttt', LocFile('ttt.vcx')))
Thisform.oScrollCnt.oForm = Thisform
* Show Window (Thisform.oScrollCnt.name) in window (thisform.name)
taohua300 2011-04-18
  • 打赏
  • 举报
回复
嘿嘿,版主,这就是从你博客里找到的例子,本来想请您指点,可您是神龙见首不见尾啊。
taohua300 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dkfdtf 的回复:]
引用 10 楼 taohua300 的回复:
不能退出的情况出现在运行表单2之后,然后关闭vfp出现提示


找到一点蛛丝马迹
不打开表单2.scx,直接在命令窗口或项目中运行 表单2,不出现不能退出的情况
情况出现在 - IDE 环境的表单设计器中打开了 表单2.scx 时运行它
可能是类库无法自动清除,造成不能退出 vfp,这样验证:
关闭表单2后,在命令窗口中 modify ……
[/Quote]
关闭表单2后,在命令窗口中modify class ttt,打开ttt类后再关闭vfp没有提示,如果打开ttt的时候点了取消,还是不能退出

在prg 使用
do form (locfile('表单2.scx'))
clear class ttt
加不加clear class ttt 都能顺利退出vfp

窗口命令中
modify form 表单2
do form 表单2
也能顺利退出

按原来的情况,在表单的queryunload事件或unload事件中使用clear class 也不能退出

好像只有在打开表单再点运行按钮的时候才出现这种情况
都市夜猫 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 taohua300 的回复:]
不能退出的情况出现在运行表单2之后,然后关闭vfp出现提示
[/Quote]

找到一点蛛丝马迹
不打开表单2.scx,直接在命令窗口或项目中运行 表单2,不出现不能退出的情况
情况出现在 - IDE 环境的表单设计器中打开了 表单2.scx 时运行它
可能是类库无法自动清除,造成不能退出 vfp,这样验证:
关闭表单2后,在命令窗口中 modify class ttt,然后看看是否可退出 vfp

加一个 prg,写上:
do form (locfile('表单2.scx'))
clear class ttt
运行这个 prg 试试
都市夜猫 2011-04-17
  • 打赏
  • 举报
回复
嗯,恭喜楼主找到一个 bug
看上去 vfp 在释放这类非常规对象的次序上有些问题
写代码调整一下释放对象的次序吧
例如,在 表单2 的 QueryUnload 事件中自己主动释放对象,加入下列代码:
If Pemstatus(This, 'oScrollCnt', 5)
This.oScrollCnt.oForm = Null
This.oScrollCnt = Null
Endif

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧