gpt4 book ai didi

multithreading - Delphi中的跨线程通信

转载 作者:行者123 更新时间:2023-12-03 14:57:21 26 4
gpt4 key购买 nike

Delphi中有关于跨线程通信的文档吗?如何向没有窗口的线程发送消息?

最佳答案

您只能将(Windows)消息发送到实现标准消息循环的线程,一旦实现窗口句柄,该消息循环将自动创建。

但是,没有必要使用消息来与线程通信。只需让它等待一个事件对象(VCL 中的 TEvent),并在您希望线程执行某个功能时发出该事件信号即可。

但是,如果您是多线程新手,请不要自己深入了解所有这些细节,除非您想达到学习效果。只需使用 OmniThreadLibrary 即可完成。一旦您知道如何使用它,通过深入研究它的内部结构,可以学到很多东西。

编辑:

另请参阅 this question 的答案,它非常相似。

编辑2:

关于询问“[OmniThreadLibrary] 使什么变得更容易,以及成本如何?”的评论我只能建议您亲自检查一下 - 也就是说,如果您至少使用 Delphi 2007。有几个示例可以说明这些概念,但对于快速的“现实生活”示例,您可以查看 this blog post -您甚至不需要为此安装库。

我也同意使用多线程库确实需要一定的信念。 OTOH 凑合使用 VCL 提供的功能并不是一个替代方案。示例代码仍然使用了考虑不周的 Synchronize() 调用。不支持线程安全的生产者-消费者-队列等更适合多线程编程的东西。如果您确实同意您的多线程程序需要比 VCL 提供的更坚实的基础 - 为什么要重新发明那个特定的轮子呢?

至于使用该库的成本:您必须自己衡量它是否足够快。恕我直言,它确实以一种很好的方式抽象了线程之间的通信,但显然,每种抽象都会降低性能。

如果您认为它根本不适合您 - 自己编写代码。我对 Delphi 4 做了同样的事情,并且我已经使用该代码近 10 年了。从我发现的错误数量和当时经历的极端情况来看,我绝对建议任何刚接触多线程的人不要为其编写自己的库代码。如果您真的愿意,请牢记 this posting 中的规则。

关于multithreading - Delphi中的跨线程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/438945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com