728x90

타이머 기반 동기화

- 타이머 : 일정 시간 뒤에 Signaled 상태가 됨

    -> 수동 리셋 타이머 : 지정한 시간 뒤에 Signaled 상태가 됨

    -> 자동 리셋 타이머 : 지정한 시간 뒤에 Signaled 상태가 되고 이후 지정한 시간마다 반복적으로 Signaled 상태가 될 수 있음

HANDLE CreateWaitableTimerW(
  LPSECURITY_ATTRIBUTES lpTimerAttributes,
  BOOL                  bManualReset,	// 자동 리셋(FALSE), 수동 리셋 설정(TRUE)
  LPCWSTR               lpTimerName
);

BOOL SetWaitableTimer(
  HANDLE              hTimer,
  const LARGE_INTEGER *lpDueTime,				// 원하는 시간 설정
  LONG                lPeriod,					// 주기적인 시간 설정
  PTIMERAPCROUTINE    pfnCompletionRoutine,
  LPVOID              lpArgToCompletionRoutine,
  BOOL                fResume
);
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(int argc, TCHAR* argv[])
{
	HANDLE hTimer = NULL;
	LARGE_INTEGER liDueTime;

	liDueTime.QuadPart = -100000000;	// 음수 값을 주게 되면 상대 시간을 의미(ns 단위)

	hTimer = CreateWaitableTimer(NULL, TRUE, _T("WaitableTimer"));
	if (!hTimer)
	{
		_tprintf(_T("CreateWaitableTimer error %d \n"), GetLastError());
		return 1;
	}

	_tprintf(_T("Waiting for 10 Seconds...\n"));

	SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, FALSE);

	WaitForSingleObject(hTimer, INFINITE);
	_tprintf(_T("Timer was Signaled\n"));
	MessageBeep(MB_ICONEXCLAMATION);
	return 0;
}

728x90

+ Recent posts