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
[56961] createProcess로 dos용 batch file 실행후, Process 및 thread 제거 방법?
linuxman [] 2391 읽음    2009-05-25 16:20
안녕하세요.
thread에서 약 2초 간격으로 dos용 batch file을 실행시키고 있습니다.
batch file은 약 20 개 정도로 순차적으로 호출됩니다.... (서로 다른 서버에 ftp 로 접속해서, 특정화일을 다운로 받아 오고 있습니다)

약 2초 정도씩 sleep 하면서 , dos용 batch file을 call 합니다.

이때,작업관리자로 process를 보면... cmd 및 ftp  process가 약 20개 이상 떠 있는것을 발견했습니다.(아래의 코드 참조)

이때, 시스템 rebooting , restart등도 잘안됩니다.
process및 trhead가 완전히 clear 안돼서 그런것 같아서..

    CloseHandle(pi.hThread);               
               다음줄에... 아래의 두줄을 삽입하니..20개는 아닌데..약 2-3개로 줄어 있슴을 확인하였는데...

    TerminateProcess(pi.hProcess,0);
                TerminateProcess(pi.hThread,0);/

그래도 시스템을 오래켜놓으면...이상해 지는 듯합니다...시스템 리소스가 마구 소비되고 있는 기분..

제가 알고 싶은싶은..CreateProcess로 dos용 batch file을 실행시킨후에... Process및 thread를 완전히 clear 시키는
방법을 알고 싶습니다..
     CloseHandle(pi.hProcess);
     ResumeThread(pi.hThread); <==이건 왜 해줘야 하는지?
     CloseHandle(pi.hThread);

수고하세요.

================================
Mhthread:: Execute()
{
int index =0;
  while(1)
  {
  
    ftpDownLoad( index ++) //
    if(index==20) index=0;

   ::Sleep(2000);
    if(Terminated ) return;
}
 
}

MyThread::ftpDownLoad(int index)
{


    batname.sprintf("c:\\test\\ftp%02d.bat",index); 
                 //ftp00.bat ~ ftp19.bat는 모두 만들어져 있습니다.
                 //ftpxx.bat 스크립트는 서로 다른 약 20개의 ftp 서버에 접속해서... 특정화일을 다운로드 합니다.
                //한 서버에서 다운로드 하는데는 약 1~2초 정도 정도의 시간이 걸립니다.(접속 가능한 서버의 경우)

    print(batname.c_str());

    char szExe[512];
    sprintf(szExe, "cmd.exe /c %s", batname);
    STARTUPINFO si = {0};
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;


    PROCESS_INFORMATION pi;
    if(CreateProcess(NULL, szExe, NULL, NULL, FALSE, CREATE_SUSPENDED | IDLE_PRIORITY_CLASS, NULL, 0, &si, &pi))
    {

        SetThreadPriority(pi.hThread, THREAD_PRIORITY_IDLE);
        SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
        SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
        CloseHandle(pi.hProcess);
        ResumeThread(pi.hThread);
        CloseHandle(pi.hThread);


    }

}

+ -

관련 글 리스트
56961 createProcess로 dos용 batch file 실행후, Process 및 thread 제거 방법? linuxman 2391 2009/05/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.