Curl 取消下载 终止下载 停止下载
void CDownloader::DoExit()
{
m_bExitThread = True;
}
size_t CDownloader::DownloadCallback(void* pBuffer, size_t nSize, size_t nMembyte, void* pParam)
{
CDownloader* pThis = (CDownloader*) pParam;
size_t nRet = 0;
do{
if (pThis)
{
//如果主动取消下载,让write回调返回0.
if (pThis->m_bExitThread)
{
break;
}
nRet = fwite(pBuffer, nSize, nMembyte, pThis->m_pOutfile);
}
}while(0);
return nRet;
}
DWORD CDownloader::DownloadThreadPro()
{
fopen_s(&m_pOutfile, path.c_str(), "wb");
curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, DownloadCallback);
curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA,(void*)this);
curl_easy_setopt(m_pCurl, CURLOPT_MAXREDIRS, 5);
curl_easy_setopt(m_pCurl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(m_pCurl, CURLOPT_NOPROGRESS, 0);
curl_easy_setopt(m_pCurl, CURLOPT_PROGRESSFUNCTION, ProgressCallback);
curl_easy_setopt(m_pCurl, CURLOPT_PROGRESSDATA,(void*)this);
m_retCode = curl_easy_perform(m_pCurl);
if (m_retCode && !m_bExitThread)
{
DoDownloadError();
}
}
浙公网安备 33010602011771号