У кого-нибудь есть хороший пример того, как использовать функцию сердцебиения в Synapse? - PullRequest
2 голосов
/ 29 ноября 2009

Я использую Synapse для Delphi, но когда во время загрузки HTTP, конечно, графический интерфейс зависает. Глядя на документацию, они предлагают использовать метод OnHeartbeat.

(см. http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat)

К сожалению, на самом деле они не дают никакого примера кода, и хотя концепция проста, использование неочевидно.

Это настройка для каждого сокета (объекта) или для приложения (класса)? Кроме того, сама процедура обратного вызова определяется как объект, что немного необычно. Кто-нибудь, кто на самом деле использовал это, готов поделиться фрагментом кода?

1 Ответ

2 голосов
/ 29 ноября 2009

Хотя я бы предложил запустить загрузку в отдельном потоке, читая документацию, вам необходимо подключить обработчик события к событию OnHeartBeat.

В этом обработчике событий вы можете вызывать Application.ProcessMessages(), но это просто опасно из-за возможности запуска событий до того, как вы действительно захотите их. Я бы использовал собственный метод, чтобы вызывать только процедуру Paint. Вы можете просто передать дескриптор вашей формы в качестве параметра или привести любой элемент управления к TWinControl и использовать свойство handle. Это просто перекрасит форму / элемент управления, но не позволит взаимодействовать с мышью / клавиатурой.

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