Windows/MFC
쓰레드 없이 장기간의 작업을 원활히 하려면???
aucd29
2013. 10. 2. 17:56
출처 : mfc4u
디스크 복사나, 복잡한 계산등의 장기간 작업을 쓰레드를 이용하지 않고 실행하면 프로그램의 UI가 먹통이 되는 경우를 많이 보았을 것이다. 이것은 어플리케이션의 메시지 루프가 돌지 않아 윈도우가 주는 메시지를 처리하지 못하기 때문이다.
당연히 이런 경우는 쓰레드를 쓰는 것이 좋을 것이나, 간편한 방법으로 장기간 작업의 중간 중간에 메시지를 처리해 주는 방법이 있다.
보통 CWinApp에 PeekAndPump()라는 함수를 만들어 두고 장기간 작업의 중간중간에 이 함수를 불러주면 된다.
[code]
BOOL CMyApp::PeekAndPump()
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
if (!PumpMessage()) {
::PostQuitMessage(0);
return FALSE;
}
}
LONG lIdle = 0;
while (OnIdle(lIdle++));
return TRUE;
}
[/code]
디스크 복사나, 복잡한 계산등의 장기간 작업을 쓰레드를 이용하지 않고 실행하면 프로그램의 UI가 먹통이 되는 경우를 많이 보았을 것이다. 이것은 어플리케이션의 메시지 루프가 돌지 않아 윈도우가 주는 메시지를 처리하지 못하기 때문이다.
당연히 이런 경우는 쓰레드를 쓰는 것이 좋을 것이나, 간편한 방법으로 장기간 작업의 중간 중간에 메시지를 처리해 주는 방법이 있다.
보통 CWinApp에 PeekAndPump()라는 함수를 만들어 두고 장기간 작업의 중간중간에 이 함수를 불러주면 된다.
[code]
BOOL CMyApp::PeekAndPump()
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
if (!PumpMessage()) {
::PostQuitMessage(0);
return FALSE;
}
}
LONG lIdle = 0;
while (OnIdle(lIdle++));
return TRUE;
}
[/code]