【发布时间】:2014-01-09 14:14:12
【问题描述】:
在一个线程中,我将事件排队以在主线程的上下文中运行,如下所示:
TThread.Queue(nil, procedure begin AddDataToChart(SomeData) end);
现在在某些时候我需要将这些事件出列,因为在匿名方法中寻址的组件已被破坏,因此不应接收更多数据。我知道我可以通过调用TThread.RemoveQueuedEvents 将事件从 TThread 同步列表中取出。不幸的是,这似乎只适用于 Thread 方法,但不适用于排队的匿名方法。所以我的问题是如何从队列中删除我的匿名方法。
【问题讨论】:
-
您可以在致电
AddDataToChart之前进行验证检查吗?一个简单的全局(范围内)布尔值就足够了。 -
@LU RD 我实际上想过这个,但发现这个解决方案有点脏。我认为删除排队的事件会更干净,因此首先不运行 AddDataToChart 代码。
-
也许您可以使用其他线程库(如 OTL)做得更好?或者,您可以明确指定这些匿名方法的专用
TThreadQueue<TProc>并从 Application.OnMessage 进行检查 -
@Arioch 我知道我可以使用完全不同的线程方法,但我认为可以删除排队的匿名方法,这将是解决我的问题的最简单方法。由于这是不可能的,目前我坚持 LURD 的建议,虽然我不是很喜欢。但另一方面,它可以工作,并且是解决我的问题的最简洁的解决方案。
标签: multithreading delphi delphi-xe