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
[75033] Re:Re: CreateProcess로 콘솔프로그램 실행시 Handle의 지속적인 증가?
단단한돌 [heaven2] 123 읽음    2018-07-25 00:16
감사합니다.
콘솔 프로그램이 끝나면 핸들을 OS가 자동으로 소거해 주는 줄 알았습니다.
감사합니다.

빌더(TWx) 님이 쓰신 글 :
: 단단한돌 님이 쓰신 글 :
: : 환경: C++ Builder XE2
: :
: : CreateProcess()함수를 이용해 콘솔 프로그램을 실행 시킵니다.
: : 그런데,
: : 실행 시킬 때마다 작업관리자에서 보면 핸들이 지속적으로 증가합니다.
: : 156 => 158 => 160 => ...
: : 왜 이런 증상이 발생하나요?
: : 24시간 운영되는 S/W라 리소스 소모에 민감하네요.
: :
: : 고수님들~!
: : 미리 감사합니다.
: :
: :
void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: :     bool flag;
: :     STARTUPINFO si;
: :     memset(&si, 0, sizeof(STARTUPINFO));
: :     si.cb = sizeof(STARTUPINFO);
: :     si.dwFlags = STARTF_USESTDHANDLES;
: :     PROCESS_INFORMATION pi;
: :     
: :     UnicodeString Dir = GetCurrentDir();
: :     UnicodeString File = "abcd.exe";
: :     UnicodeString x = Dir + "\\" + File + " D:\\201807200120.adx";
: :     AnsiString xx = x;
: :     
: :     flag = CreateProcess(NULL,x.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
: :     
: :     if(!flag) {
: :         ShowMessage("Fail to create process.");
: :     } else {
: :         ShowMessage("Executed..");
: :     }
: : }

: :
:
:
: 답변:
:
:
: OS 기초적인 부분인데...
: 프로세스를 생성했으니 당연히 프로세스 핸들이 열리게 되고...
: 모든 프로세스는 프로그램 실행을 위해 적어도 하나 이상의 쓰레드는 기본적으로 갖게 되잖아요.
:
: 아래와 같이 사용하지 않는 프로세스 핸들과 쓰레드 핸들을 닫아주면 됍니다.
:
:
:     ...
:     flag = CreateProcess(NULL,x.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
: 
:     if(!flag) {
:         OutputDebugStringA("Fail to create process.");
:     } else {
:         // wait process termination
:         WaitForSingleObject( pi.hProcess, INFINITE );
:         CloseHandle(pi.hProcess);
:         CloseHandle(pi.hThread);
:         OutputDebugStringA("Executed..");
:     }
:     ...
: 

:
:

+ -

관련 글 리스트
75031 [질문] CreateProcess로 콘솔프로그램 실행시 Handle의 지속적인 증가? 단단한돌 125 2018/07/24
75032     Re: CreateProcess로 콘솔프로그램 실행시 Handle의 지속적인 증가? 빌더(TWx) 156 2018/07/25
75033         Re:Re: CreateProcess로 콘솔프로그램 실행시 Handle의 지속적인 증가? 단단한돌 123 2018/07/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.