C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71285] [질문] WinExec()로 외부 프로그램 실행시킬 때 잠깐동안 Hang up되는데..
땅주인 [heaven2] 4015 읽음    2014-05-09 18:22
개발환경: C++ Builder XE5

일종의 WatchDog을 만들었는데요..
해당 프로세서를 쳐다 보다가 없어지면 다시 실행시키는.. 서버 프로그램이나
죽으면 안되는 프로그램일 때 쓰는 보조 유틸리티..

잘 동작은 하는데요..
WinExec()로 실행시킬 때 WatchDog 프로그램 자체가 5~10초 정도 Hangup되어 버립니다.
죽었나 했더니 시간이 지나니 그냥 정상으로 돌아오구요..

개발 PC에는 그런 증상이 나타나지 않는데, 테스트 PC와 비교할 때
개발 PC는 계정 자체가 Administrator 계정이고, 테스트 PC는 그냥 관리자 권한을 가지고 있는 계정입니다. 패스워드도 없구요.
권한 문제인 지 모르겠네요. XP에서도 괜찮구요.. Win7에서 Hang up 되는 증상이 있네요.

10초 타이머로 해당 프로세서의 윈도우 핸들을 얻을 수 있는 지 계속 쳐다보다가 몇 번(3번)을 계속 얻지 못하면
프로세서가 죽은 것으로 판정하고 WinExec로 해당 프로그램을 실행시켜 버립니다. 실행되는 프로그램은
Mutex로 중복 실행되는 것을 방지했구요.

코드를 보면 아래와 같은데.. 문제될만한 것이 있는 지?
혹시나 타이머 이벤트에서 이러한 코드가 들어있어서 인 지?

// Timer Event ( 10 Second ) 

if ( !theEnv.m_sWindowTitle1.IsEmpty() ) {

	hHandle = ::FindWindow(NULL, theEnv.m_sWindowTitle1.c_str());

	if ( hHandle == NULL ) {
		m_iCnt1++;
		if ( m_iCnt1 > 2 ) {
			AnsiString sFile = theEnv.m_sExecuteFile1;
			int iResult = ::WinExec(sFile.c_str(), SW_SHOW);   // 여기서 한참 Hang up 됨(5~10초 후 정상으로 돌아옴)
			ShowResult(iResult, theEnv.m_sExecuteFile1);
			m_iCnt1 = 0;
		} else {
			LogMessage(theEnv.m_sExecuteFile1 + " is not found.." + IntToStr(m_iCnt1));
		}
	} else {
		LogMessage(theEnv.m_sExecuteFile1 + " is running..", false);
	}
}


어떻게 해야 할 지?


+ -

관련 글 리스트
71285 [질문] WinExec()로 외부 프로그램 실행시킬 때 잠깐동안 Hang up되는데.. 땅주인 4015 2014/05/09
71294     Re:[질문] WinExec()로 외부 프로그램 실행시킬 때 잠깐동안 Hang up되는데.. 몇줄 보탭니다 4128 2014/05/13
71297         Re:Re:[질문] WinExec()로 외부 프로그램 실행시킬 때 잠깐동안 Hang up되는데.. 땅주인 4188 2014/05/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.