在Delphi中是否有关于跨线程通信的文档?如何向没有窗口的线程发送消息?
解决方法
您只能向实现标准消息循环的线程发送(
Windows)消息,这将在实现窗口句柄后自动生成.
但是,没有必要使用消息与线程通信.让它等待事件对象(VCL中的TEvent),并在您希望线程执行函数时发出此事件的信号.
但是,如果您不熟悉多线程 – 请不要自己研究所有这些细节,除非您想要学习效果.只需使用OmniThreadLibrary即可完成.一旦你知道如何使用它,通过挖掘它的内部结构可以学到很多东西.
编辑:
另见this question的答案非常相似.
编辑2:
关于评论“[OmniThreadLibrary]更容易做什么以及成本是多少?”我只能建议你自己检查一下 – 也就是你至少使用Delphi 2007.有几个例子来说明这些概念,但是对于一个快速的“现实生活”的例子,你可以看看this blog post – 你甚至不需要为此安装库.
我也同意使用库进行多线程确实需要一定的信仰行为. OTOH使用VCL提供的功能几乎不可替代.示例代码仍然使用错误的Synchronize()调用.不支持线程安全的生产者 – 消费者队列,它更适合多线程编程.如果你同意你需要一个比VCL提供更坚实的多线程程序基础 – 为什么重新发明那个特定的轮子呢?
至于使用图书馆的成本:您必须自己计时是否足够快.它确实以一种好的方式抽象了线程之间的通信恕我直言,但显然每个抽象都会降低性能.
如果你认为它毕竟不适合你 – 自己编写代码.我对Delphi 4做了同样的事情,我已经使用该代码近10年了.根据我发现的错误数量以及我在那段时间遇到的角落情况来判断,我肯定会建议任何刚接触多线程的人不要为它编写自己的库代码.如果您真的想要,请将this posting中的规则铭记于心.