천객만래 [千客萬來] (It has an interminable succession of visitors)

[개발/MFC] Sleep()함수 대신 프로그램 딜레이 시키기 

개발을 하다가 보면... 어떤 조건이 true가 될 때까지 기다려야 할 때가 있다.
그렇게 하려면 loop를 사용해야한다. 
그리고 대기함수인 Sleep() 함수를 사용하게 되는 경우가 생기는데
이 함수를 사용하면. 모든 메세지 처리가 중단되기 때문에 
프로그램 응답 없음과 같은 애매하고 난감한 사항에 처하게 된다.
그래서 이 Sleep()이라는 함수 대신에
프로세스나 쓰레드에서 사용되는 메세지는 처리되면서 특정조건이 
만족할 때까지 기다릴 수 있는 함수가 필요하다.

대기시간 동안 메세지큐에서 메세지를 확인하여 처리하면서 
기다리게 해준다.

/////////////////////////////////////////////////////////////////
// 수행 대기 delay 함수(instead sleep function)
/////////////////////////////////////////////////////////////////
void CBaConApp::Wait(DWORD dwMillisecond)
{
 MSG msg;
 DWORD dwStart;
 dwStart = GetTickCount();

 while(GetTickCount() - dwStart < dwMillisecond)
 {
  while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }
}

Posted by SB패밀리


Sleep()함수 대신 프로그램 딜레이 시키기

개발을 하다가 보면... 어떤 조건이 true가 될 때까지 기다려야 할 때가 있다.
그렇게 하려면 loop를 사용해야한다.
그리고 대기함수인 Sleep() 함수를 사용하게 되는 경우가 생기는데
이 함수를 사용하면. 모든 메세지 처리가 중단되기 때문에
프로그램 응답 없음과 같은 애매하고 난감한 사항에 처하게 된다.
그래서 이 Sleep()이라는 함수 대신에
프로세스나 쓰레드에서 사용되는 메세지는 처리되면서 특정조건이
만족할 때까지 기다릴 수 있는 함수가 필요하다.

대기시간 동안 메세지큐에서 메세지를 확인하여 처리하면서
기다리게 해준다.

/////////////////////////////////////////////////////////////////
// 수행 대기 delay 함수(instead sleep function)
/////////////////////////////////////////////////////////////////
void CBaApp::Wait(DWORD dwMillisecond)
{
 MSG msg;
 DWORD dwStart;
 dwStart = GetTickCount();

 while(GetTickCount() - dwStart < dwMillisecond)
 {
  while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }
}

Posted by SB패밀리