线程内访问vcl组件的疑问,大家讨论讨论
我看了很多关于线程内访问vcl组件时的文章说都必须使用Synchronize到主线程中执行,我想请问一下象我这样的情况,使用Synchronize是必须的吗?我ShowModal一个窗口,然后在这个窗口开启一个线程(以下称为子线程),同时通过一些方法让该窗口无法手工关闭掉,只有线程执行完毕,才自动关闭,我在子线程中执行Execute时,需要更新显示,所以需要在子线程内访问Vcl组件,设置一些label的值之类的,这样的操作需要用Synchronize来访问vcl组件吗?我现在的代码都是直接访问的,没有出现任何问题,有没有什么隐患呢?
(我使用直接访问还是碰到过一个错误,那就是主窗体有listview,我在子线程中取哪些行被选中了时,有时候会误判,特别是我在子线程执行过程中,把我的程序和其他程序互相切换,误判率特高,后来改用Synchronize就没有出现了)
问题点数:100、回复次数:7Top
1 楼real_name(*真名)回复于 2005-03-02 19:46:41 得分 5
多好的一个话题
怎么还没人讨论 呢?Top
2 楼li_chengbin(小李飞刀)回复于 2005-03-02 20:15:02 得分 10
VCL界面显示操作时,应该Synchronize进行同步Top
3 楼rouqing(*冰雨&双子座奇缘*)回复于 2005-03-02 20:17:01 得分 10
Synchronize(Form1.Edit1.Text);线程同步哦Top
4 楼rouqing(*冰雨&双子座奇缘*)回复于 2005-03-02 20:17:59 得分 10
在delphi,cb里边就是这样的,访问vcl就要这样写Top
5 楼vpoor(kIngAge)回复于 2005-03-02 20:53:22 得分 35
如果无临界数据交集情况出现,不用Synchronize也不会有问题,不过为了以后扩展方便,还是加上吧,套句话说就是线程同步既然存在就有它的价值~~~hohoTop
6 楼cybercake(数字蛋糕)回复于 2005-03-02 22:25:04 得分 30
因为你自己不可能完全了解VCL的所有机制,因而在你自己的线程中难免会出现访问冲突。Synchronize就是因为这个而存在的。
其他的就如楼上所说了。Top
7 楼dragonfox()回复于 2005-03-02 23:13:02 得分 0
明白了,谢谢大家。但是可恨的Synchronize居然不能传参数进去,也不能传参数回来,每次要取vcl组件的值都要定义很多私有变量,越来越觉得做软件象体力活了。Top




