请问编写桌面程序UI线程的问题

ycongtou 2014-02-04 09:15:26
我知道java中swing,有Event Dispatch Thread 这个UI线程的概念。即不要把工作任务放在该线程中执行,该线程只负责分派任务给其他线程和收集其他任务线程的工作结果来更新UI,并且jdk6 中已经提供SwingWorker这个类。
但是Delphi中还没见过这个概念呢,资料也不好找。具体该怎么实现呢?可不可以给个简易小例子?以前工作用Delhi7,程序总是界面无响应,是不是就是把任务放在UI线程中导致的?
谢谢

...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2014-02-05
  • 打赏
  • 举报
回复
delphi 的效率应该不低了,如果要访问网络资源,就不要在主线程中处理。 如果是刷新的数据量太大,需要考虑不要让界面不断刷新,可以用如下代码暂停和恢复刷新: ListView1.Items.BeginUpdate; listview1.Items.EndUpdate;
ycongtou 2014-02-04
  • 打赏
  • 举报
回复
引用 4 楼 sololie 的回复:
涉及ui的地方都自己进行同步,用临界区、互斥体、信号啥的都随便 ttread 类的话里面也提供了用于同步的synchronize函数, 绘图的canvas类也有lock、unlock等用来同步的函数 如果线程是用api createthread创建的,要把全局变量 ismultithread 设为true, 或者接用 beginthread来替代,参数完全跟createthread一样,其内部已经自动ismultithread:=true 最好的是用 tthread 类
好的,看来还要多多研究
sololie 2014-02-04
  • 打赏
  • 举报
回复
涉及ui的地方都自己进行同步,用临界区、互斥体、信号啥的都随便 ttread 类的话里面也提供了用于同步的synchronize函数, 绘图的canvas类也有lock、unlock等用来同步的函数 如果线程是用api createthread创建的,要把全局变量 ismultithread 设为true, 或者接用 beginthread来替代,参数完全跟createthread一样,其内部已经自动ismultithread:=true 最好的是用 tthread 类
ycongtou 2014-02-04
  • 打赏
  • 举报
回复
引用 2 楼 sololie 的回复:
你自己把线程弄死锁了,跟用啥概念都没啥直接关系吧。为啥没有响应得看你的代码才知道。 应该总是假定线程是不安全的。 至于那些容器,delphi都有 inifile 单元里有 tstringhash、thashedstringList contnrs 单元里全都是,自己挨个看 上d2009+版本,泛型容器更是多,映射表、字典啥的应有尽有
恩好的。 以前用Delphi,公司完全是让对着抄抄改改能用就行,结果做出来就会界面卡死。从组件事件一行行代码看也没看到有“Thread”字样出现,应该就是把任务放进UI线程里导致的吧,Delphi我不知道java里我知道是这样的。 之前工作用的7,现在想自己学了弄个2009吧
sololie 2014-02-04
  • 打赏
  • 举报
回复
你自己把线程弄死锁了,跟用啥概念都没啥直接关系吧。为啥没有响应得看你的代码才知道。 应该总是假定线程是不安全的。 至于那些容器,delphi都有 inifile 单元里有 tstringhash、thashedstringList contnrs 单元里全都是,自己挨个看 上d2009+版本,泛型容器更是多,映射表、字典啥的应有尽有
ycongtou 2014-02-04
  • 打赏
  • 举报
回复
还有,Delphi中哪些类是像java中:ArrayList、LinkedList HashMap、这类容器的?是不是要自己动手去实现

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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