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();

  }

}

posted on 2017-02-24 14:40  晨夕猿  阅读(3146)  评论(0)    收藏  举报

导航