系統(tǒng)相關(guān):線程的創(chuàng)建與終止方法和代碼

字號(hào):

DWORD WINAPI Thread(LPVOID lpParam)
    {
    while(TRUE)
    {
    printf("Thread1\n");
    ::Sleep(500);
    printf("Thread2\n");
    ::Sleep(500);
    printf("Thread3\n");
    ::Sleep(500);
    printf("Thread4\n");
    ::Sleep(500);
    }
    return 0;
    }
    void main()
    {
    DWORD dwThread;
    HANDLE m_hUpThread=CreateThread(NULL,0,Thread,NULL,0,&dwThread);
    ::Sleep(5000);
    TerminateThread(m_hUpThread,0);
    CloseHandle(m_hUpThread);
    cout<<"CloseHandle"<    ::Sleep(1000*10);
    }
    這個(gè)是SDK創(chuàng)建和終止線程的方法,起初是想弄明白線程在結(jié)束線程時(shí)沒(méi)執(zhí)行的代碼是否執(zhí)行后才退出線程,結(jié)果是沒(méi)執(zhí)行的代碼不執(zhí)行就推出了,考試,大提示還有個(gè)問(wèn)題就是T運(yùn)行了erminateThread(m_hUpThread,0)函數(shù)為什么還要運(yùn)行CloseHandle(m_hUpThread);網(wǎng)上查到的說(shuō)法“CloseHandle是為線程內(nèi)核計(jì)數(shù)器減1.如果不這樣做的話,會(huì)造成內(nèi)核資源的泄漏”,《Windows核心編程》這本書里有這方面的內(nèi)容。以后得買來(lái)看看。還發(fā)現(xiàn)了2個(gè)函數(shù)DWORD ResumeThread(HANDLE hThread); DWORD SuspendThread(HANDLE hThread);分別是恢復(fù)線程和掛起線程具體解釋看MSDN。
    //創(chuàng)建線程 創(chuàng)建后立即執(zhí)行
    m_pThread=AfxBeginThread(Thread,this,THREAD_PRIORITY_NORMAL);
    //結(jié)束線程
    TerminateThread(m_pThread->m_hThread,0);
    CloseHandle(m_pThread->m_hThread);
    UINT Thread(LPVOID pParam)
    {
    CTestDlg *plat=(CTestDlg*)pParam;
    int i=0;
    CString str;
    while(1)
    {
    str.Format("第%d執(zhí)行循環(huán)!0",i);
    plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
    i++;
    ::Sleep(500);
    str.Format("第%d執(zhí)行循環(huán)!1",i);
    plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
    i++;
    ::Sleep(500);
    str.Format("第%d執(zhí)行循環(huán)!2",i);
    plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
    i++;
    ::Sleep(500);
    }
    return 0;
    }
    這個(gè)是MFC創(chuàng)建線程的方法