사용자 참여란
사용자 참여란입니다. 기본적으로 제가 운영하는 사이트의 강좌/팁 란이지만, 사용자들이 참여할 게시판이 있질 않아서, 혹시나 하는 마음에 추가합니다.
글 수 15
// MsgWaitForMultipleObjects를 이용해 시간 지연시키기
//
// Sleep과 같은 기능을 하지만 Sleep으로 시간 지연을 하면 메시지 처리를 할 수 없기 때문에 일명'창렉'이 걸리지만,
// 아래 함수는 메시지를 처리하면서 지연을 걸어주기 때문에 창렉이 걸리지 않습니다.
// 사용법도 Sleep이랑 같습니다.
//
// WaitForTimer(1000); <- 1초간 지연을 시킵니다.
procedure WaitForTimer(MilliSeconds : LongInt);
const
_SECOND = -10000;
var
lBusy : LongInt;
hTimer : HWND;
liDueTime : LARGE_INTEGER;
begin
hTimer := CreateWaitableTimer(nil, True, 'WaitableTimer');
//
// Sleep과 같은 기능을 하지만 Sleep으로 시간 지연을 하면 메시지 처리를 할 수 없기 때문에 일명'창렉'이 걸리지만,
// 아래 함수는 메시지를 처리하면서 지연을 걸어주기 때문에 창렉이 걸리지 않습니다.
// 사용법도 Sleep이랑 같습니다.
//
// WaitForTimer(1000); <- 1초간 지연을 시킵니다.
procedure WaitForTimer(MilliSeconds : LongInt);
const
_SECOND = -10000;
var
lBusy : LongInt;
hTimer : HWND;
liDueTime : LARGE_INTEGER;
begin
hTimer := CreateWaitableTimer(nil, True, 'WaitableTimer');
if hTimer = 0 then Exit;
liDueTime.QuadPart := _SECOND * MilliSeconds;
SetWaitableTimer(hTimer, TLargeInteger(liDueTime), 0, nil, nil, False);
repeat
lBusy := MsgWaitForMultipleObjects(1, hTimer, False, INFINITE, QS_ALLINPUT);
Application.ProcessMessages;
until lBusy = WAIT_OBJECT_0;
CloseHandle(hTimer);
end;






