|
void __fastcall TMain::DownloadClick(TObject *Sender)
{
int i;
DWORD threadID;
TThreadList* Downloadlist = new TThreadList();
TDownThread* pThread = new TDownThread();
for(i = 1; i <= Max ; i++) {
SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES) ,0, TRUE};
hThreads[i] = (HANDLE)::CreateThread(&sa,4096,&SecondThreadFunc, //쓰레드 생성
(void*)pThread ,CREATE_SUSPENDED,&threadID);
}
}
Downloadlist->Add(pThread ); //생성한 쓰레드를 리스트에 추가한다.
for(i = 1; i <= Max; i++)
ResumeThread(hThreads[i]);
MessageLoop(hThreads,Max); //MsgWaitForMultipleObjects 함수 사용
for(i = 1; i <= Max; i++)
CloseHandle(hThreads[i]);
}
}
unsigned long __stdcall SecondThreadFunc( void* pArguments )
{
TMain *pOwner = (TMain*)pArguments;
TDownThread* pThread = new TDownThread();
outmessage("Thread %2d has an ID if %u\n",(int)pArguments,GetCurrentThreadId());
pThread->Download(); //다운로드 실행
return 0;
}
void TDownThread::Download()
{
.............
}
위와 같이 하면 TDownThread라는 클래스의 다운로드 함수가 멀티쓰레드로 실행될까여?
그리고 생성된 쓰레드가 Downloadlist->Add(pThread ); 에 리스트형태로 들어가나여?
초보라 잘 모르겠네여..
단일 쓰레드는 그냥하면 되는거 같은데..멀티쓰레드는 어떻게 사용해야 할지..
여러개의 장비에서 다운로드가 동시에 이뤄져야 하는데..위 형태로 한건 다운로드 함수에서
다른 함수를 콜하여 장비의 상태를 확인뒤 다운로드가 이뤄져야 하므로 다른 클래스를 만들었습니다.
그리고, CreateThread에서 인자 전달시 현재 실행중 (HANDLE)hThreads[i]는 어떻게 알수 있나여?
이 걸 알아야지 현재 실행중인 장비의 위치를 알수 있을 것 같은데..
|