Задержка в потоке

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Задержка в потоке

Eugie » 08 фев 2005, 23:56

fml1, просто вызывай Sleep вне Synchronize - все должно работать

fml1 » 08 фев 2005, 18:56

UUU
проблем с зависанием формы - нет.
у меня задержку нужно сделать внутри потока (паузу), чтобы главная форма при этом реагировала. Из потока, не вызовешь Application.ProccessMessage :( А вот API функции можно вызвать, вот я и спрашиваю как их вызвать.

function waitWithMessageLoop(hEvent: THandle; dwTimeout: DWORD): boolean;
var
dwRet: DWORD;
msg: tagMSG;
lExit: boolean;
begin
if hEvent = 0 then
hEvent:= CreateEvent(nil, FALSE, FALSE, nil);

lExit:= true;
while(lExit) do begin
dwRet:= MsgWaitForMultipleObjects(1, hEvent, FALSE, dwTimeout, QS_ALLINPUT);
if (dwRet = WAIT_OBJECT_0) then begin
Result:= TRUE;
lExit:= false;
break;
end;
if (dwRet <> WAIT_OBJECT_0 + 1) then begin
Result:= false;
lExit:= false;
break;
end;

while( PeekMessage(msg, 0,0,0,PM_REMOVE)) do begin
TranslateMessage(msg);
DispatchMessage(msg);
if (WaitForSingleObject(hEvent, 0) = WAIT_OBJECT_0) then begin
Result:= TRUE;
lExit:= false;
break;
end;
if Form1.isExit then
lExit:= false;
break;
end;
end;
Result:= FALSE;
end;


Пробовал вышеуказанную функцию использовать:
waitWithMessageLoop(0, 60000);
Но внутри этой функции программа зацикливается.[/b]

UUU » 08 фев 2005, 10:09

Странно, у меня в форме постоянно крутится цикл, в котором есть Application.ProcessMessages, также в цикле вызываются до 20 потоков, которые обращаются к веб-серверу (Инди-компонент) - никаких проблем с зависанием формы - нет.

Задержка в потоке

fml1 » 07 фев 2005, 23:51

Подскажите, многоуважаемый Олл как в потоке (THread) сделать задержку 60000 милисекунд, чтобы форма, из которой поток запускается реагировала на кнопки - работала вобчем. А то sleep(x) делает ее (форму) равнодушной к любому действию пользователя.
Может кто подскажет, как с помощью PeekMessage(...) организовать обработку событий во время вышеописанной задержки.

Вернуться к началу