加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:10:28 所属栏目:Java 来源:网络整理
导读:在Delphi中是否有关于跨线程通信的文档?如何向没有窗口的线程发送消息? 解决方法 您只能向实现标准消息循环的线程发送( Windows)消息,这将在实现窗口句柄后自动生成. 但是,没有必要使用消息与线程通信.让它等待事件对象(VCL中的TEvent),并在您希望线程执行
在Delphi中是否有关于跨线程通信的文档?如何向没有窗口的线程发送消息?

解决方法

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

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

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

编辑:

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

编辑2:

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读