LabWindows/CVI 에서 일정 시간 이후 자동으로 종료되는(Autoclose) 팝업 윈도우 코드 [쓰레드에서 사용가능]

LabWindows/CVI 에서 일정 시간 이후 자동으로 종료되는(Autoclose) 팝업 윈도우 코드 (쓰레드에서 사용가능하다)


/**
 @brief Display panel with wait for 'nWaitTimeMS' (Millisecond unit)
 @brief 쓰레드에서 사용가능하다.
 
 @param
	nWaitTimeMS	: 대기 시간
	szMessage   : 출력 메세지 

*/
int ShowPleaseWaitPanel(unsigned int nWaitTimeMS, char * szMessage)
{
	
// Modaless
	DisplayPanel(panelHandle_WAIT);

	
	unsigned int dwStartTick = GetTickCount();
	
	for(;;)
	{
		static int nState = 1;

		if ( abs(GetTickCount() - dwStartTick) > nWaitTimeMS)
		{
			
			// 메시지 에디트 박스를 초기화 하여,차후에 사용할때 이전 문자가 남아있지 않도록 한다.
			SetCtrlVal(panelHandle_WAIT,PANEL_WAIT_MSG,"");
			
			// 남은 시간 초, 에디트 박스를 초기화하여, 차후에 사용할때 이전 문자가 남아있지 않도록 한다.
			SetCtrlVal(panelHandle_WAIT,PANEL_WAIT_LEFT_TIME_SEC,"");
			ProcessDrawEvents();
			ProcessSystemEvents();
			
			break;
		}
			
		if ( szMessage != NULL)
			SetCtrlVal(panelHandle_WAIT,PANEL_WAIT_MSG,szMessage);

		{
			char szTimeLeft[1024] = "";
			
			int nLeftSec = (nWaitTimeMS - (abs(GetTickCount() - dwStartTick)));
			
			// 타이밍에 따라 남은 시간 계산시 음수가 되면 0으로 강제 설정한다.
			if (nLeftSec <= 0 )
				nLeftSec = 0;
			
			sprintf(szTimeLeft,"Estimated %04d msec(s)",nLeftSec);
			SetCtrlVal(panelHandle_WAIT,PANEL_WAIT_LEFT_TIME_SEC,szTimeLeft);
		}
				   
		ProcessDrawEvents();
		ProcessSystemEvents();

		

		nState = nState ? 0 : 1;
	}

	// Modaless
	HidePanel(panelHandle_WAIT);

	return 0;
}