【问题标题】:Does anyone have a good example of how to use Synapse's Heartbeat function?有没有人有一个很好的例子来说明如何使用 Synapse 的心跳功能?
【发布时间】:2010-12-21 09:19:22
【问题描述】:

我正在使用 Synapse for Delphi,但是在 HTTP 下载期间,当然,GUI 会冻结。查看文档,他们建议使用 OnHeartbeat 方法。

(见http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat

不幸的是,他们实际上并没有给出任何代码示例,虽然概念很简单,但用法并不明显。

这是每个套接字(对象)设置,还是每个应用程序(类)设置?另外,回调过程本身被定义为一个对象,这有点不寻常。有实际使用过的人愿意分享示例代码片段吗?

【问题讨论】:

    标签: delphi pascal lazarus freepascal synapse


    【解决方案1】:

    虽然我建议在单独的线程中运行您的下载,但阅读文档时您必须将事件处理程序挂钩到 OnHeartBeat 事件。

    在该事件处理程序中,您可以调用 Application.ProcessMessages() 但这很危险,因为事件可能在您真正想要它们之前被触发。我将使用自定义方法仅调用 Paint 例程。您可以将表单的句柄作为参数传递,或者将任何控件强制转换为 TWinControl 并使用句柄属性。这只会重新绘制表单/控件,但不允许鼠标/键盘交互。

    procedure AllowRepaints(h: HWND);
    var
      m: tMsg;
    begin
      while PeekMessage(m, h, WM_PAINT, WM_PAINT, PM_REMOVE) do
        DispatchMessage(m);
    end;
    

    【讨论】:

    • 嘿,我有时在让线程在 Windows/MacOS/Windows 上可靠地工作时遇到问题,所以我采取了更简单的方法,走得更远,只使用另一个 进程 用于互联网电话,但感谢您提供的示例,我想很多人会发现它很有用。
    • "...,阅读文档,您必须将事件处理程序挂钩到 OnHeartBeat 事件。"这正是我在寻找代码要做的事情。 (请注意,我没有使用可视化组件)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多