|
안녕하세요.
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);
}
}
|