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
[54801] 감사합니다 ^^
번외편 [wifemylove] 1266 읽음    2008-10-08 01:24
그때 급하게 수정하느라고 답변을 늦게 다네요..
꼭 필요했던 기능이였는데 도움주셔서 감사합니다.
앞으로 좀더 자세히 보고 해야겠네요 ㅎㅎ



장성호 님이 쓰신 글 :
: 음...
:
: 먼저 3초마다 반복해서 호출할것이라면
:
: Thread를 이용해서 한번만 CreateProcess해서 route.exe를 실행한후에
: 필요할때마다 Command를 tx 해서 받아오는것도 한 방법일듯 합니다.
:
:
: 그것 그렇구
:
: 보통 프로그램이 일정시간동안 잘 돌아가다가 죽는 경우는
: 1. 메모리가 어디 새거나..
: 2. 핸들이 계속 증가 하거나 하는 경우가 대부분이죠
:
: 그것을 쉽게 확인하는 방법은
: 1. 작업관리자를 띄워서요
: 2. 작업관리자->보기->열선택 에서 "메모리 사용" 과 "핸들" ,"쓰레드" 등을 체크해보세요
: 3. 그런다음 프로그램을 띄워놓고 해당항목의 변화를 지켜보세요
:
:
: 님의 프로그램을 보니... "핸들"이 한번 Timer가 호출될때마다 2개씩 증가하네요
: 그렇다면 Handle을 열고난뒤에 닫지 않은 핸들이 있다는것인데...
:
: 코드를 한줄씩 디버깅하면서 실행해 보면
: 핸들이 증가하는데는 CreatePipe 와 CreateProcess 두군데서 2개씩 증가하여 총 4개가 증가하네요
:
: 그런데 CloseHandle을 2군데 뿐이네요
:
: 그렇다면 닫지 않은 핸들이 무엇일까요?
: CreatePipe로  생성한 핸들 hread , hwrite 두개는 CloseHandle 했구요
:
: 나머지 두개는 바로..
:
: PROCESS_INFORMATION  구조체에 있습니다.
: 구조체를 보면 다음과 같이 선언되어있습니다.
:
:
: ypedef struct _PROCESS_INFORMATION {
:     HANDLE hProcess;
:     HANDLE hThread;
:     DWORD dwProcessId;
:     DWORD dwThreadId;
: } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
: 

:
: 위 구조체를 보면 hProcess와 hThread가 HANDLE로 선언되어 있는것을 확인할 수 있을 것입니다.
: 그러므로 님께서 닫지 않은 핸들은 바로
:
: hProcess와 hThread 두개이네요
:
: 코드 맨마지막에
: CloseHandle(pi.hThread);
: CloseHandle(pi.hProcess);
:
: 해주면 문제가 해결 될듯..
:
:
: 그럼..
:
:
:
: 번외편 님이 쓰신 글 :
: : 네이버에 찾아보니깐 virus 나 다른것들 때문에 오류가 난다고 하는데...
: : 혹시나 몰라 한번 여쭤봅니다. 소스중에 이상한부분이나 잘못쓰고 있는점 있으면 지적해주세요
: : 타이머로 3초마다 한번씩 실행시키는데 어느정도(2,3시간?)  켜노면
: : 응용프로그램 오류가 뜨네요..
: :
: : void __fastcall TForm1::Timer9Timer(TObject *Sender)
: : {
: :         int i,j;
: :         bool flag;
: :         HANDLE hwrite, hread;
: :         SECURITY_ATTRIBUTES sa;
: :         sa.nLength = sizeof(SECURITY_ATTRIBUTES);
: :         sa.lpSecurityDescriptor = NULL;
: :         sa.bInheritHandle = true;
: :
: :         flag = CreatePipe(&hread, &hwrite, &sa, 0);
: :
: :         STARTUPINFO si;
: :         memset(&si, 0, sizeof(STARTUPINFO));
: :         si.cb = sizeof(STARTUPINFO);
: :         si.dwFlags = STARTF_USESTDHANDLES;
: :         si.hStdOutput = hwrite; 
: :         si.hStdError = hwrite; 
: :         PROCESS_INFORMATION pi;
: :
: :         flag = CreateProcess(NULL, "route print", NULL, NULL,True, DETACHED_PROCESS,
: :         NULL, NULL, &si, &pi);
: :
: :         CloseHandle(hwrite);
: :  
: :         char buffer[512];
: :         DWORD BytesRead;
: :         AnsiString ResultString;
: :         char IP_Gateway[30];
: :         int IP_Index;
: :         while(ReadFile(hread, buffer, sizeof(buffer)-1, &BytesRead, NULL) && BytesRead)
: :         {
: :                 buffer[BytesRead] = '\0';
: :                 ResultString = ResultString + buffer;
: :         }
: :         CloseHandle(hread);
: :         IP_Index = ResultString.AnsiPos("Default Gateway:");
: :         memcpy(IP_Gateway,&ResultString[IP_Index+22],30);
: :         j=3;
: :         for( i=0;i<30;i++)
: :         {
: :                 if(IP_Gateway[i] == '.' )
: :                 {
: :                         j--;
: :                 }
: :
: :                 if( j == 0 )
: :                 {
: :                         j = i +1 ;
: :                         break ;
: :                 }
: :         }
: :         memset(&IP_Gateway[j],0,(30 - j) );
: :
: :         if(strstr(Label8->Caption.c_str(),IP_Gateway)!=NULL)
: :         {
: :                 Network = 1;
: :         }
: :         else if(strstr(Label9->Caption.c_str(),IP_Gateway)!=NULL)
: :         {
: :                 Network = 2;
: :         }
: :         else if(strstr(Label10->Caption.c_str(),IP_Gateway)!=NULL)
: :         {
: :                 Network = 3;
: :         }
: :         else if(strstr(Label11->Caption.c_str(),IP_Gateway)!=NULL)
: :         {
: :                 Network = 4;
: :         }
: :         else
: :         {
: :                 Network = 0;
: :         }       
: : }

+ -

관련 글 리스트
54749 장시간 켜노니깐 응용프로그램 오류가 나는데 소스 어떤부분이 이상한지좀 봐주세요.. 번외편 1156 2008/10/03
54760     Re:장시간 켜노니깐 응용프로그램 오류가 나는데 소스 어떤부분이 이상한지좀 봐주세요.. 장성호 1679 2008/10/05
54801         감사합니다 ^^ 번외편 1266 2008/10/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.