微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多线程 – Delphi中的跨线程通信

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

解决方法

您只能向实现标准消息循环的线程发送( Windows)消息,这将在实现窗口句柄后自动生成.

但是,没有必要使用消息与线程通信.让它等待事件对象(VCL中的TEvent),并在您希望线程执行函数时发出此事件的信号.

但是,如果您不熟悉多线程 – 请不要自己研究所有这些细节,除非您想要学习效果.只需使用OmniThreadLibrary即可完成.一旦你知道如何使用它,通过挖掘它的内部结构可以学到很多东西.

编辑:

另见this question的答案非常相似.

编辑2:

关于评论“[OmniThreadLibrary]更容易做什么以及成本是多少?”我只能建议你自己检查一下 – 也就是你至少使用Delphi 2007.有几个例子来说明这些概念,但是对于一个快速的“现实生活”的例子,你可以看看this blog post – 你甚至不需要为此安装库.

我也同意使用库进行多线程确实需要一定的信仰行为. OTOH使用VCL提供的功能几乎不可替代.示例代码仍然使用错误的Synchronize()调用.不支持线程安全的生产者 – 消费者队列,它更适合多线程编程.如果你同意你需要一个比VCL提供更坚实的多线程程序基础 – 为什么重新发明那个特定的轮子呢?

至于使用图书馆的成本:您必须自己计时是否足够快.它确实以一种好的方式抽象了线程之间的通信恕我直言,但显然每个抽象都会降低性能.

如果你认为它毕竟不适合你 – 自己编写代码.我对Delphi 4做了同样的事情,我已经使用该代码近10年了.根据我发现的错误数量以及我在那段时间遇到的角落情况来判断,我肯定会建议任何刚接触多线程的人不要为它编写自己的库代码.如果您真的想要,请将this posting中的规则铭记于心.

原文地址:https://www.jb51.cc/java/126621.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐