mfc下多線(xiàn)程編程

1.mfc支持兩種線(xiàn)程
   用戶(hù)界面線(xiàn)程
   工作線(xiàn)程
2.mfc中所有線(xiàn)程都是由CWinThread對(duì)象表示
    CWinThread是用戶(hù)接口線(xiàn)程的基類(lèi), CWinApp就是從CWinThread派生出來(lái)的
    在寫(xiě)用戶(hù)接口線(xiàn)程時(shí), 也要從CWinThread類(lèi)派生出自己的線(xiàn)程類(lèi)
    可以調(diào)用AfxBeginThread函數(shù), 會(huì)創(chuàng)建CWinThread對(duì)象
3.編寫(xiě)是想工作線(xiàn)程的控制函數(shù), 控制函數(shù)的原型:
    UINT ControlFunctionName(LPVOID pParam); //線(xiàn)程回調(diào)
4.線(xiàn)程調(diào)用AfxBeginThread函數(shù)就可以創(chuàng)建新的線(xiàn)程
5.創(chuàng)建并啟動(dòng)工作線(xiàn)程:
    CWinThread* AfxBeginThread(
        AFX_THREADPROC pfnThreadProc,
        LPVOID pParam,
        int nPriority = THREAD_PRIORITY_NORMAL,
        UINT nStackSize = 0,
        WORD dwCreateFlags = 0,
        LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
6.AfxEndThread終止線(xiàn)程
7.創(chuàng)建用戶(hù)界面線(xiàn)程
    從CWinThread類(lèi)派生出自己的線(xiàn)程類(lèi)
    改造這個(gè)類(lèi)
    啟動(dòng)用戶(hù)界面
8.基類(lèi)的一些成員函數(shù):
    ExitInstance, 當(dāng)線(xiàn)程退出是, 會(huì)調(diào)用執(zhí)行清理工作
    InitInstance, 執(zhí)行線(xiàn)程類(lèi)實(shí)例初始化, 子類(lèi)必須重寫(xiě)
    OnIdle, 執(zhí)行線(xiàn)程特定空閑時(shí)間處理
    PreTranslateMessage, 過(guò)濾消息
    Run, 執(zhí)行線(xiàn)程函數(shù)
9.AfxBeginThread函數(shù)的另一個(gè)重載原型:(界面線(xiàn)程)
    CWinThread* AfxBeginThread(
        CRuntimeClass* pThreadClass,  //用RUNTIME_CLASS宏將線(xiàn)程類(lèi)指針轉(zhuǎn)換為指向CRuntimeClass對(duì)象指針
        int nPriority = THREAD_PRIORITY_NORMAL,
        UINT nStackSize = 0;
        DWORD dwCreateFlags = 0,
        LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
    );
10.終止線(xiàn)程
    正常終止線(xiàn)程 VOID PostQuitMessage(int nExitCode);
    提前終止線(xiàn)程 在線(xiàn)程內(nèi)調(diào)用AfxEndThread函數(shù) VOID AfxEndThread(UINT nExitCode);
11.線(xiàn)程同步技術(shù)
    信號(hào)量 --限制使用共享資源的線(xiàn)程數(shù)目
        CSemaphore g_Sem(5, 5); 時(shí)間內(nèi)最多只有5個(gè)線(xiàn)程能共享資源, 還初始開(kāi)始時(shí)沒(méi)有線(xiàn)程獲得信號(hào)資源
            一旦線(xiàn)程訪問(wèn)共享資源, 信號(hào)量計(jì)數(shù)器就減1, 若變?yōu)?, 則下來(lái)對(duì)資源的訪問(wèn)就會(huì)被拒絕, 知道持有的資源線(xiàn)程釋放了資源的持有權(quán)
    互斥對(duì)象 --內(nèi)核對(duì)象
    臨界區(qū) --用戶(hù)模式對(duì)象 弄不好就容易出現(xiàn)死鎖, 不過(guò)用起來(lái)很簡(jiǎn)單, 只有4個(gè)API
        InitializeCriticalSection, EterCreiticalSection, LeveCriticalSection, DeleteCriticalSection
    事件對(duì)象 --內(nèi)核對(duì)象 分收工重置對(duì)象和自動(dòng)重置對(duì)象