저는 C++ 스레딩 관련 도움이 필요합니다. 다운로드 파일 (인터넷에서 파일을 다운로드하기 위해)로 내 보낸 함수가있는 DLL을 만들었습니다. 이 함수는 차례로 파일을 다운로드하기위한 스레드를 만듭니다 (파일을 다운로드하는 데 사용되는 함수가 URLDownloadToFile 즉, 다운로드 기능을 스레드에 넣는 기능을 차단합니다).다운로드 할 C++ 스레딩
다음을 달성하고 싶습니다.
downloadfile 함수를 호출하면 주 스레드가 차단되어서는 안됩니다.
한 번에 두 개 이상의 파일을 다운로드하고 싶습니다.
다운로드 기능이 C++로 작성된 dll에 있으며이 dll이 파스칼에서 사용된다는 점에 유의하십시오. 당신의 downloadFile
함수는 URLDownloadToFile
함수가처럼 차단을 일으킬 것이다, 반환하기 전에 완료 다운로드 스레드를 기다리는 것처럼
struct DOWNLOADPARAM
{
HANDLE hEventStop;
TCHAR *szURL;
TCHAR *szFilePath;
};
DWORD WINAPI Transfer(void *hw)
{
Mutex mutex_;
DOWNLOADPARAM *const pDownloadParam = static_cast<DOWNLOADPARAM *>(hw);
CBSCallbackImpl bsc(NULL, pDownloadParam->hEventStop);
const HRESULT hr = ::URLDownloadToFile(NULL,pDownloadParam->szURL ,pDownloadParam->szFilePath,0,&bsc);
return 0;
}
extern "C" void __declspec(dllexport) downloadfile(TCHAR *url, TCHAR *dest)
{
Mutex mutex_;
DWORD dwThreadId;
DOWNLOADPARAM *obj = new DOWNLOADPARAM();
obj->szURL = url;
obj->szFilePath = dest;
if((hThread = CreateThread(NULL, 0, Transfer, (LPVOID)obj, 0,&dwThreadId)) != NULL)
{
}
// Following code block the thread untill finished
WaitForSingleObject(hThread, INFINITE);
TerminateThread(hThread, 0);
CloseHandle(hThread);
}
당신은이 문제를 설명해야합니다. – sth
또한 이러한 뮤텍스로 무엇을하고 있는지 설명해야합니다. 나는 네가 그들을 선언 한 것을 본다. 그러나 네가 그들을 사용하는 것을 보지 못한다. –
내가 언급 한 것처럼 실제로 inno 스크립트 (파스칼 스크립팅)에서 dll downloadfile 함수를 호출하려고합니다. inno는 쓰레드 나 타이머를 지원하지 않거나 대기중인 함수를 지원하지 않기 때문에 비동기 인터넷에서 파일을 다운로드 할 새로운 dll 파일을 생성하는 이유가 있습니다. 더 많은 정보/도움이 필요합니다. – Iqbal