use*_*ser 1 delphi multithreading listview delphi-xe
我的程序在分离的线程上执行"繁重"任务(搜索文件并查找签名).每个任务都使用PostMessage来调用将记录添加到ListView的过程.
问题是当ListView(经常)显示许多记录时,我的窗口将冻结.似乎我的程序正在尖叫以请求Application.ProcessMessages.只有Progressbar仍在继续.操作完成后,一切恢复正常.
如果我删除添加记录的操作,我的程序的操作将顺利运行.
你有什么主意吗?
我们曾经达到了可以将多少消息发布到消息队列的限制.很可能你也达到了这个限制.
来自MSDN
每个消息队列的发布消息数限制为10,000.这个限制应该足够大.如果您的应用程序超出限制,则应重新设计它以避免消耗这么多系统资源.
来自最佳同步是无同步
PostMessage到主GUI线程的问题是你可以"饱和"主GUI消息泵,并干扰WM_TIMER和WM_PAINT消息(如果消息队列为空,则仅调度这些消息,PostMessage意味着队列可能永远不会另外,输入队列中有一条名义限制为10,000条消息;之后,PostMessage将丢弃该消息并返回FALSE.此外,即使没有命中10,000限制,即使是几百条消息也意味着用户看到键盘和鼠标输入响应不佳,这是一种令人无法接受的情况.
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |