探讨:当涉及到VCL控件时,如何在delphi中实现真正的多线程 ( 积分: 20 )

  • 主题发起人 主题发起人 yanggh
  • 开始时间 开始时间
Y

yanggh

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi中编写多线程程序,如果涉及到VCL控件时,必须使用synchronize,否则程序运行总会出现问题.但使用synchronize,这又不是真正的多线程了.如何才能实现多线程呢?
就象window media player似的,其中的动画是多线程
 
在Delphi中编写多线程程序,如果涉及到VCL控件时,必须使用synchronize,否则程序运行总会出现问题.但使用synchronize,这又不是真正的多线程了.如何才能实现多线程呢?
就象window media player似的,其中的动画是多线程
 
你把与VCL写操作的代码放入Synchronize,无关的代码不要放进去就行了.
 
如果在程序中,大量代码就是对VCL读写操作的,这样怎么才能对其实现多线程
 
把对界面的更新加入一个队列,由主线程负责进行处理
如果你想多线程处理界面更新,还是建议你使用 Windows API
VCL本身不支持多线程 .net 类库就好一点
可以试试 Delphi.Net
 
强烈支持楼主,我也有同样的疑问,在线程中使用vcl老是出现“无效的窗口句柄”,如果不创建那个线程就什么事也没有。期待高手
 
//来自:lxw5214
//老是出现“无效的窗口句柄
这是你自己使用错误
1.对于写操作,你可以通过PostMessage来实现。
2.对于读操作,可以同过把数据独立出来,比如直接呈现在ListView中的数据你可以使用VirtualListView 另外其实每一个线程需要访问的数据应该是比较少的,你可以通过建立一个数据管理类,通过专门的数据接口管理,
要知道,不管你如何做,对于多线程中的数据 多写/读写,只要不是只读的数据,访问时必须作互斥的,因此首先要明白你所需要的到底是什么?是性能?还是什么?仅仅是觉得不爽?
 
既然Borland 已经声明 VCL 和 RTL 是非线程安全的, 那么使用时就应该注意了
 
如果要在访问可视化vcl的时候效率高,那么就使用消息吧,这样就绝对可靠了,
但是现在有个问题,在多线程里面使用postmessage这个函数,主线程总是会出现重复处理同一个消息,不知道是怎么回事了。
 
后退
顶部