CreateThread创建线程
1.声明线程函数:
1
|
DWORD WINAPI DownloadThread(LPVOID);
// 下载线程,
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 创建多线程
void CMyDownloadDlg::CreateThread(CDLoadThread* pDloadThread) { HANDLE m_hThread, m_hNotify; DWORD dwThread; // 创建响应线程,启动线程函数 m_hThread = ::CreateThread( NULL, 0, DownloadThread, (LPVOID)pDloadThread, 0, &dwThread); if ( NULL == m_hThread) { TRACE( "创建新的线程出错!\n"); return; } } |
3.定义线程函数
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
DWORD WINAPI DownloadThread(LPVOID lpParam)
{ // 为每个线程(任务数)创建一个套接字来完成下载 CDLoadThread* pThis = (CDLoadThread*)lpParam; LONG indexTask = 0; //indexTask = pThis->m_indexThread; LONG indextNum = pThis->httpDload.m_index; InterlockedIncrement(&pThis->httpDload.m_index); // 互斥方法访问共享资源,防止冲突 int ret = pThis->httpDload.CreateThreadFunc(indexTask, indextNum); //TRACE("线程%d已成功完成!%d\n", index, ret); return 0; } |
AfxBeginThread创建线程
1.声明线程函数:
1
|
UINT StartDownloadThread(LPVOID pParam);
// 下载线程,
|
2.创建线程:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
CWinThread* m_pThread;
// 线程对象指针
// 创建多线程 void CMyDownloadDlg::CreateThread(CDLoadThread* pDloadThread) { // 创建响应线程,启动线程函数 m_pThread = AfxBeginThread(StartDownloadThread, (LPVOID)pDloadThread); if( NULL == m_pThread) { TRACE( "创建新的线程出错!\n"); return; } } |
3.定义线程函数
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
UINT StartDownloadThread(LPVOID pParam)
{ // 为每个线程(任务数)创建一个套接字来完成下载 CDLoadThread* pThis = (CDLoadThread*)pParam; LONG indexTask = 0 ; //indexTask = pThis->m_indexThread; LONG indextNum = pThis->httpDload.m_index; InterlockedIncrement(&pThis->httpDload.m_index); // 互斥方法访问共享资源,防止冲突 int ret = pThis->httpDload.CreateThreadFunc(indexTask, indextNum); //TRACE("线程%d已成功完成!%d\n", index, ret); return 0 ; } |