- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!