У кого-нибудь есть хороший пример использования функции пульса Synapse?
Я использую Synapse для Delphi, но когда во время загрузки HTTP, конечно, графический интерфейс зависает. Глядя на документацию, они предлагают использовать метод OnHeartbeat.
(См. http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat)
К сожалению, они на самом деле не дают никакого примера кода, и хотя концепция проста, использование не очевидно.
Это настройка для каждого сокета (объекта) или для приложения (класса)? Кроме того, сама процедура обратного вызова определяется как объект, что немного необычно. Кто-нибудь, кто действительно использовал это, готов поделиться фрагментом кода?
1 ответ
Хотя я бы посоветовал запустить загрузку в отдельном потоке, читая документацию, вы должны подключить обработчик события к событию 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;