我需要幫助C++線程的東西,我已經創建了一個導出函數作爲下載文件(從互聯網上下載文件)的DLL。這個函數輪流創建一個線程來下載文件(用於下載文件的函數是阻塞函數,即URLDownloadToFile,這就是爲什麼我將下載功能放在線程上的原因)。C++線程下載
我想實現以下功能。
我的調用downloadfile函數不應該阻塞主線程。
我想一次下載多個文件。
請記住,下載功能是在C++中創建的DLL,這個DLL將在Pascal中使用。
以下是代碼片段:
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腳本(pascal腳本)調用dll下載文件函數。 inno不支持線程或定時器或等待函數,這就是爲什麼我創建一個新的dll文件,將從互聯網異步下載文件。我需要更多的信息/幫助。 – Iqbal