亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++封裝線程類的實現方法

2020-01-26 15:13:58
字體:
來源:轉載
供稿:網友

本文實例講述了C++封裝線程類的實現方法。分享給大家供大家參考。具體方法如下:

復制代碼 代碼如下:
// 給主窗口的通知消息 
#define WM_CUTTERSTART WM_USER + 100    // wParam == xxx  lParam==xxxx 
 
/* 
外面調用這個類時,只需要IsRunning() Startxxx(xxx) Suspendxxx()   Resumexxx() Stopxxx() 
*/ 
 
/* 
m_bContinue在真正的工作代碼DoSomething中檢測,在退出和類析構時設為FALSE,在Reset時和構造時設為TRUE  標志內部是否繼續工作 
m_bRunning  在Startxxx Suspendxxx Resumexxx 中檢測,在構造時和Reset時設為FALSE,在_ThreadEntry得到WaitForSingleObject時設為TRUE 
            外部通過IsRunning得到是否正在運行 
 
*/ 
class CMyClass 

public: 
    // 工作退出代碼 
    enum ExitCode{  
        exitSuccess,    // 成功完成任務 
        exitUserForce,  // 用戶終止 
        exitError,  // 源文件出錯 
    }; 
 
    // 構造函數 
    CMyClass(HWND hWndNotify); //接收窗口句柄 
 
    // 屬性 對外開放 
    BOOL IsRunning() const { return m_bRunning; }  //對外 
 
    // 操作  對外開放 
    BOOL Startxxx(xxx); 
    BOOL Suspendxxx(); 
    BOOL Resumexxx(); 
    void Stopxxx(); 
 
    // 具體實現 
public: 
    ~CFileCutter(); //析構 
 
protected: 
    // 重置參數信息和狀態標志 
    void Reset(); 
    // 真正的工作核心代碼 
    void DoSomething(); 
 
    // 工作線程 
    UINT friend _ThreadEntry(LPVOID lpParam); 
 
    // 狀態標志 
    BOOL m_bContinue;   //  是否繼續工作 DoSomething中檢測,如果在DoSomething中不m_bContinue,就中止工作 
    BOOL m_bRunning;    //  是否處于工作狀態 
 
    // 同步以上兩組數據 
    CRITICAL_SECTION m_cs;  // Data gard 
 
private: 
    // 對象的生命周期全局有效的數據 
    HWND m_hWndNotify;  // 接受消息通知事件的窗口句柄 
    HANDLE m_hWorkEvent;    // 通知開始工作的事件對象句柄 
    CWinThread* m_pThread;  // 工作線程 
    BOOL m_bSuspend;    // 暫停標志 
    BOOL m_bExitThread; // 退出標志 
}; 
 
//構造 
CMyClass::CMyClass() 

    // 初始化全局有效變量 
 
    m_hWndNotify = hWndNotify; 
    m_bExitThread = FALSE; 
    m_bSuspend = FALSE; 
    // 創建等待事件對象 
    m_hWorkEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); 
    // 創建工作線程 
    m_pThread = AfxBeginThread(_CutterEntry, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL); 
    m_pThread->m_bAutoDelete = FALSE; 
    m_pThread->ResumeThread(); 
 
    // 初始化工作期間有效變量 
    m_bContinue = TRUE;  //工作函數不被打斷,這個標志就為TRUE,在工作函數中檢測這個值 
    m_bRunning  = FALSE;  //線程函數在WaitForSingleObject,所以還是FALSE 
    // 創建關鍵代碼段 
    ::InitializeCriticalSection(&m_cs);  

 
// 內部工作線程 
UINT _ThreadEntry(LPVOID lpParam) 

    // 得到CMyClass對象的指針 
    CMyClass* pMyClass = (CMyClass*)lpParam; 
 
    // 循環處理用戶的工作請求 
    while(::WaitForSingleObject(pMyClass->m_hWorkEvent, INFINITE) == WAIT_OBJECT_0 &&  
        !pMyClass->m_bExitThread) 
    { 
        // 設置狀態標志,說明正在工作 
        ::EnterCriticalSection(&pCutter->m_cs); 
        pMyClass->m_bRunning = TRUE; 
        ::LeaveCriticalSection(&pCutter->m_cs); 
 
        // 開始真正的工作 
        pMyClass->DoSomething() 
 
        // 準備接受新的工作任務 
        pMyClass->Reset(); //這個函數中設置一下各標志的值 
    } 
 
    return 0; 

 
void CMyClass::Reset() 

    ::EnterCriticalSection(&m_cs); 
 
    // 重置狀態標志 
    m_bContinue = TRUE; 
    m_bRunning = FALSE; 
 
    ::LeaveCriticalSection(&m_cs); 

 
CMyClass::~CMyClass() 

    // 設置結束標志 
    m_bExitThread = TRUE; 
 
    // 設置強制退出標志 
    ::EnterCriticalSection(&m_cs); 
    m_bContinue = FALSE; 
    ::LeaveCriticalSection(&m_cs); 
 
    //**********很重要****************************************** 
    // 防止線程在m_hWorkEvent事件上等待 
    ::SetEvent(m_hWorkEvent); 
 
    // 確保工作線程結束 
    ::WaitForSingleObject(m_pThread->m_hThread, INFINITE); 
 
    // 釋放所有資源 
    ::CloseHandle(m_hWorkEvent); 
    ::DeleteCriticalSection(&m_cs);  
    delete m_pThread; 

 
BOOL CMyClass::Startxxx(xxx) 

    if(m_bRunning) 
        return FALSE; 
 
    // 通知線程開始工作 
    ::SetEvent(m_hWorkEvent); 
    return TRUE; 

 
BOOL CMyClass::Suspendxxx() 

    if(!m_bRunning) 
        return FALSE; 
 
    // 暫停工作線程 
    if(!m_bSuspend) 
    { 
        m_pThread->SuspendThread(); 
        m_bSuspend = TRUE; 
    } 
    return TRUE; 

 
BOOL CMyClass::Resumexxx() 

    if(!m_bRunning) 
        return FALSE; 
 
    // 喚醒工作線程 
    if(m_bSuspend) 
    { 
        m_pThread->ResumeThread(); 
        m_bSuspend = FALSE; 
    } 
    return TRUE; 

 
void CMyClass::Stopxxx() 

    // 設置強制退出標志 
    ::EnterCriticalSection(&m_cs); 
    m_bContinue = FALSE; 
    ::LeaveCriticalSection(&m_cs); 
 
    // 防止線程處于暫停狀態 
    ResumeCutter(); 

 
//-------------------------實現代碼-------------------------// 
 
//真正的工作代碼 
void CMyClass::DoSomething() 

    // 通知用戶,出錯 
    ::PostMessage(m_hWndNotify, wm_xxx, exitError, 0); 
 
    // 通知用戶,開始工作 
    ::PostMessage(m_hWndNotify, WM_XXXSTART, 0, XX); 
     
    // 首先判斷是否要求終止執行 
    if(!m_bContinue) 
    { 
        //釋放資源 
        xxxx; 
 
        if(!m_bExitThread) 
            ::PostMessage(m_hWndNotify, WM_XXXXSTOP, XX, XX); 
        return; 
    } 
    // 通知用戶,工作完成 
    ::PostMessage(m_hWndNotify, WM_CUTTERSTOP, exitSuccess, nCompleted); 
}

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线不卡| 中文字幕亚洲图片| 国产精品久久色| 亚洲国产另类 国产精品国产免费| 亚洲成人1234| 国产精品久久久久久久美男| 欧美性猛交xxxx乱大交3| 九九热最新视频//这里只有精品| 国产精品久久91| 国产成人福利夜色影视| 孩xxxx性bbbb欧美| 亚洲男人天堂2023| 欧美大片欧美激情性色a∨久久| 欧美另类99xxxxx| 亚洲欧美综合另类中字| 另类天堂视频在线观看| 亚洲国产高潮在线观看| 色综合色综合久久综合频道88| 国产成人福利视频| 国内精品美女av在线播放| 91精品久久久久久久| 国产成人亚洲综合青青| 91国产在线精品| 欧美孕妇毛茸茸xxxx| 国产精品欧美日韩一区二区| 欧美视频第一页| 九九热最新视频//这里只有精品| 国产97色在线|日韩| 一区二区三区四区视频| 日韩美女激情视频| 欧美性视频精品| 奇米4444一区二区三区| 中文字幕久热精品视频在线| 国产成人亚洲综合91| 国产精品流白浆视频| 亚洲**2019国产| 国产国产精品人在线视| 欧美视频在线观看 亚洲欧| 国产成人亚洲综合| 欧美另类第一页| 一本一本久久a久久精品牛牛影视| 久久久久久一区二区三区| 亚洲情综合五月天| 91久久精品国产91久久| 日本亚洲欧洲色| 青青久久av北条麻妃黑人| 黑人巨大精品欧美一区二区一视频| 亚洲欧美视频在线| 亚洲精品美女在线观看播放| 久久国产加勒比精品无码| 亚洲xxxxx| 亚洲最大福利视频网| 国产精品1区2区在线观看| 欧美成人午夜剧场免费观看| 欧美另类极品videosbestfree| 国产精品久久久久久av| 中文字幕日韩在线视频| 日韩国产激情在线| 国内伊人久久久久久网站视频| 亚洲综合日韩在线| 91精品国产免费久久久久久| 中文字幕av日韩| 国产精品一区二区久久精品| 欧美日韩第一视频| 午夜精品蜜臀一区二区三区免费| 日韩在线播放av| 成人久久久久爱| 久久成人国产精品| 成人免费观看a| 尤物精品国产第一福利三区| 亚洲国产日韩精品在线| 日韩av在线免播放器| 91在线观看免费高清| 中文字幕国产精品| 久久99国产综合精品女同| 久久久女女女女999久久| 日韩国产激情在线| 国产成人精品免高潮在线观看| 亚洲天堂第一页| 色综合天天综合网国产成人网| 欧美高清在线观看| 2019中文字幕免费视频| 亚洲精品视频中文字幕| 日韩欧美在线免费观看| 日韩国产欧美精品一区二区三区| www.久久色.com| 热久久美女精品天天吊色| 91成人精品网站| 91精品中文在线| 中文字幕免费精品一区| 国产成人精品a视频一区www| 2018中文字幕一区二区三区| 日本精品视频在线| 欧美亚洲国产视频| 国产成人福利网站| 成人午夜一级二级三级| 热久久免费国产视频| 欧美专区在线播放| 欧洲亚洲免费在线| 日韩中文字幕精品| 成人精品一区二区三区电影免费| 亚洲国产精品悠悠久久琪琪| 欧美最猛性xxxxx亚洲精品| 69**夜色精品国产69乱| 久久久噜久噜久久综合| 日韩欧美在线中文字幕| 日韩黄色在线免费观看| 91欧美日韩一区| 最近日韩中文字幕中文| 中文字幕欧美日韩va免费视频| 欧美性视频在线| 亚洲国产精品电影在线观看| 国产精品午夜国产小视频| 欧美电影免费在线观看| 精品久久久久久久久久久久久| 久久亚洲影音av资源网| 欧美日韩国产一区在线| 亚洲精品av在线播放| 波霸ol色综合久久| 久久精品国产一区二区电影| 92国产精品视频| 亚洲性无码av在线| 亚洲天堂男人的天堂| 在线视频欧美性高潮| 日韩av电影在线播放| 欧美色欧美亚洲高清在线视频| 国产精品自在线| 欧美成人免费小视频| 最好看的2019年中文视频| 91亚洲va在线va天堂va国| 亚洲国产免费av| 久久婷婷国产麻豆91天堂| 国产在线久久久| 欧美精品激情blacked18| 日韩av免费看网站| 国产亚洲精品美女| 国产成人综合一区二区三区| 2020久久国产精品| 精品高清美女精品国产区| 久久99久久99精品免观看粉嫩| 色婷婷久久一区二区| 91po在线观看91精品国产性色| 久久久久久欧美| 尤物精品国产第一福利三区| 国产亚洲视频在线| 日韩欧美在线第一页| 伊人久久久久久久久久久久久| 日韩精品免费在线视频| 欧美一区视频在线| 人九九综合九九宗合| 国产一区二区av| 精品一区二区三区三区| 日韩精品久久久久久久玫瑰园| 日韩欧美国产免费播放| 成人美女免费网站视频| 日韩精品视频观看| 亚洲影视中文字幕| 久久亚洲精品国产亚洲老地址| 国产精品久久久久久一区二区| 黑人巨大精品欧美一区二区| 国产午夜一区二区| 欧美激情一区二区久久久| 久久成人人人人精品欧| 少妇久久久久久|