青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

多線程編程之三——線程間通訊

七、線程間通訊

  一般而言,應用程序中的一個次要線程總是為主線程執行特定的任務,這樣,主線程和次要線程間必定有一個信息傳遞的渠道,也就是主線程和次要線程間要進行通信。這種線程間的通信不但是難以避免的,而且在多線程編程中也是復雜和頻繁的,下面將進行說明。

  1. 使用全局變量進行通信

    由于屬于同一個進程的各個線程共享操作系統分配該進程的資源,故解決線程間通信最簡單的一種方法是使用全局變量。對于標準類型的全局變量,我們建議使用volatile 修飾符,它告訴編譯器無需對該變量作任何的優化,即無需將它放到一個寄存器中,并且該值可被外部改變。如果線程間所需傳遞的信息較復雜,我們可以定義一個結構,通過傳遞指向該結構的指針進行傳遞信息。
     
  2. 使用自定義消息

    我們可以在一個線程的執行函數中向另一個線程發送自定義的消息來達到通信的目的。一個線程向另外一個線程發送消息是通過操作系統實現的。利用Windows操作系統的消息驅動機制,當一個線程發出一條消息時,操作系統首先接收到該消息,然后把該消息轉發給目標線程,接收消息的線程必須已經建立了消息循環。

例程7 MultiThread7

  該例程演示了如何使用自定義消息進行線程間通信。首先,主線程向CCalculateThread線程發送消息WM_CALCULATE,CCalculateThread線程收到消息后進行計算,再向主線程發送WM_DISPLAY消息,主線程收到該消息后顯示計算結果。

  1. 建立一個基于對話框的工程MultiThread7,在對話框IDD_MULTITHREAD7_DIALOG中加入三個單選按鈕IDC_RADIO1,IDC_RADIO2,IDC_RADIO3,標題分別為1+2+3+4+......+10,1+2+3+4+......+50,1+2+3+4+......+100。加入按鈕IDC_SUM,標題為“求和”。加入標簽框IDC_STATUS,屬性選中“邊框”;
  2. 在MultiThread7Dlg.h中定義如下變量:
    protected:
        int nAddend;
        
    代表加數的大小。

    分別雙擊三個單選按鈕,添加消息響應函數:
    void CMultiThread7Dlg::OnRadio1()
        {
        nAddend=10;
        }
        void CMultiThread7Dlg::OnRadio2()
        {
        nAddend=50;
        }
        void CMultiThread7Dlg::OnRadio3()
        {
        nAddend=100;
        }
    并在OnInitDialog函數中完成相應的初始化工作:
    BOOL CMultiThread7Dlg::OnInitDialog()
        {
        ……
        ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
        nAddend=10;
        ……
        
    在MultiThread7Dlg.h中添加:
    #include "CalculateThread.h"
        #define WM_DISPLAY WM_USER+2
        class CMultiThread7Dlg : public CDialog
        {
        // Construction
        public:
        CMultiThread7Dlg(CWnd* pParent = NULL);	// standard constructor
        CCalculateThread* m_pCalculateThread;
        ……
        protected:
        int nAddend;
        LRESULT OnDisplay(WPARAM wParam,LPARAM lParam);
        ……
        
    在MultiThread7Dlg.cpp中添加:
    BEGIN_MESSAGE_MAP(CMultiThread7Dlg, CDialog)
        ……
        ON_MESSAGE(WM_DISPLAY,OnDisplay)
        END_MESSAGE_MAP()
        LRESULT CMultiThread7Dlg::OnDisplay(WPARAM wParam,LPARAM lParam)
        {
        int nTemp=(int)wParam;
        SetDlgItemInt(IDC_STATUS,nTemp,FALSE);
        return 0;
        }
    以上代碼使得主線程類CMultiThread7Dlg可以處理WM_DISPLAY消息,即在IDC_STATUS標簽框中顯示計算結果。
  3. 雙擊按鈕IDC_SUM,添加消息響應函數:
    void CMultiThread7Dlg::OnSum()
        {
        m_pCalculateThread=
        (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
        Sleep(500);
        m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAddend,NULL);
        }
    OnSum()函數的作用是建立CalculateThread線程,延時給該線程發送WM_CALCULATE消息。
  4. 右擊工程并選中“New Class…”為工程添加基類為 CWinThread 派生線程類 CCalculateThread。

    在文件CalculateThread.h 中添加
    #define WM_CALCULATE WM_USER+1
        class CCalculateThread : public CWinThread
        {
        ……
        protected:
        afx_msg LONG OnCalculate(UINT wParam,LONG lParam);
        ……
        
    在文件CalculateThread.cpp中添加
    LONG CCalculateThread::OnCalculate(UINT wParam,LONG lParam)
        {
        int nTmpt=0;
        for(int i=0;i<=(int)wParam;i++)
        {
        nTmpt=nTmpt+i;
        }
        Sleep(500);
        ::PostMessage((HWND)(GetMainWnd()->GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);
        return 0;
        }
        BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread)
        //{{AFX_MSG_MAP(CCalculateThread)
        // NOTE - the ClassWizard will add and remove mapping macros here.
        //}}AFX_MSG_MAP
        ON_THREAD_MESSAGE(WM_CALCULATE,OnCalculate)
        //和主線程對比,注意它們的區別
        END_MESSAGE_MAP()
        
    在CalculateThread.cpp文件的開頭添加一條:
    #include "MultiThread7Dlg.h"
        
      以上代碼為 CCalculateThread 類添加了 WM_CALCULATE 消息,消息的響應函數是 OnCalculate,其功能是根據參數 wParam 的值,進行累加,累加結果在臨時變量nTmpt中,延時0.5秒,向主線程發送WM_DISPLAY消息進行顯示,nTmpt作為參數傳遞。
編譯并運行該例程,體會如何在線程間傳遞消息。

posted on 2011-04-25 15:57 厚積薄發 閱讀(378) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            蘑菇福利视频一区播放| 亚洲一区二区三区精品在线| 亚洲午夜视频在线观看| 亚洲大片在线| 久久久久久久性| 蜜臀91精品一区二区三区| 精品二区视频| 久久精品99| 欧美专区日韩专区| 狠狠入ady亚洲精品| 亚洲综合国产| 欧美xx视频| 蜜桃av一区二区在线观看| 在线精品国精品国产尤物884a| 亚洲先锋成人| 午夜精品亚洲一区二区三区嫩草| 欧美国产精品v| 日韩午夜三级在线| 99视频+国产日韩欧美| 国产精品综合| 亚洲国产成人av| 国产精品女主播一区二区三区| 久久久久久久999精品视频| 久热精品视频在线观看| 亚洲少妇自拍| 久久久女女女女999久久| 国产精品99久久不卡二区| 性做久久久久久久免费看| 亚洲片国产一区一级在线观看| 亚洲天堂av图片| 亚洲国产精品毛片| 亚洲免费影视第一页| 亚洲激情在线播放| 亚洲欧美精品伊人久久| 亚洲人成欧美中文字幕| 亚洲自拍电影| 一区二区三区日韩欧美| 久久久久久**毛片大全| 亚洲欧美视频在线观看视频| 欧美不卡在线| 久久综合色8888| 国产精品视频一| 亚洲美女精品成人在线视频| 激情自拍一区| 午夜免费电影一区在线观看| 一个人看的www久久| 免费高清在线一区| 欧美在线资源| 国产精品久久久久秋霞鲁丝| 亚洲国产日韩欧美在线99| 一区二区三区亚洲| 欧美一区二区三区在线免费观看| 亚洲一区二区3| 欧美福利电影在线观看| 欧美v亚洲v综合ⅴ国产v| 国精品一区二区| 亚洲欧美日韩国产成人| 亚洲欧美清纯在线制服| 欧美日韩1区| 亚洲日韩欧美一区二区在线| 亚洲欧洲日韩综合二区| 免费看av成人| 欧美成人资源网| **欧美日韩vr在线| 久久影院午夜片一区| 蜜臀av性久久久久蜜臀aⅴ| 国语自产在线不卡| 欧美在线播放一区| 久久激情综合网| 国产综合色在线| 久久精品久久综合| 欧美aⅴ99久久黑人专区| 激情视频一区| 欧美成人一区二区三区| 亚洲国产欧美国产综合一区| 亚洲精品美女在线观看| 欧美黄免费看| 一区二区三区免费在线观看| 亚洲一区二区三区在线看 | 欧美一区二区啪啪| 国产精品一卡二卡| 久久国内精品自在自线400部| 久久婷婷丁香| 亚洲国产婷婷香蕉久久久久久99| 免费91麻豆精品国产自产在线观看| 免费成人在线观看视频| 亚洲看片网站| 国产精品久久久对白| 香蕉免费一区二区三区在线观看 | 在线电影欧美日韩一区二区私密| 久久久青草青青国产亚洲免观| 欧美不卡在线| 亚洲视频一区二区免费在线观看| 国产精品久久97| 久久免费国产精品| 日韩天天综合| 久久不射2019中文字幕| 亚洲动漫精品| 欧美色另类天堂2015| 欧美一区二区三区在线视频 | 久久激情综合网| 在线免费不卡视频| 欧美日韩国产成人在线91| 亚洲女同性videos| 免播放器亚洲| 亚洲一区中文| 亚洲国产精品久久久久秋霞不卡| 欧美日韩亚洲一区二区三区在线| 亚洲欧美一区二区三区极速播放 | 亚洲欧美国产日韩天堂区| 好吊妞**欧美| 欧美午夜宅男影院在线观看| 久久久亚洲国产天美传媒修理工| 日韩视频一区二区三区在线播放 | 一区二区久久| 国模精品一区二区三区色天香| 欧美精品二区| 久久免费视频在线| 亚洲欧美日韩在线高清直播| 欧美成人黑人xx视频免费观看| 午夜精品一区二区三区在线视 | 在线观看日韩av先锋影音电影院| 欧美日韩亚洲高清| 你懂的视频一区二区| 欧美一区二区三区在线播放| 亚洲精品乱码久久久久久久久 | 亚洲一区二区三区成人在线视频精品| 国内一区二区三区在线视频| 国产精品毛片a∨一区二区三区| 欧美福利视频在线| 久久女同精品一区二区| 欧美一级夜夜爽| 午夜精品久久久久久| 亚洲一区不卡| 在线亚洲观看| 亚洲社区在线观看| 一本在线高清不卡dvd| 91久久精品国产91久久性色tv| 免费成人av在线| 美女久久网站| 欧美高清视频一区二区| 男男成人高潮片免费网站| 久久亚洲一区二区三区四区| 欧美一区二区三区免费观看| 亚洲自拍偷拍色片视频| 亚洲欧美日韩网| 午夜精品一区二区三区在线视| 亚洲天堂成人在线视频| 亚洲一区二区三区视频| 亚洲午夜精品视频| 亚洲自拍偷拍麻豆| 欧美一区二区三区精品 | 亚洲人成在线免费观看| 亚洲三级国产| 亚洲视频欧美在线| 亚洲欧美日韩直播| 欧美在线免费播放| 久久久久久网址| 欧美黄色一区二区| 99国产精品国产精品久久| 在线视频你懂得一区| 亚洲欧美激情在线视频| 午夜精品999| 久久久久久夜精品精品免费| 久久婷婷av| 欧美精品日韩| 国产精品色午夜在线观看| 国内精品久久久久影院 日本资源| 国内自拍一区| 日韩视频―中文字幕| 亚洲在线一区| 另类成人小视频在线| 亚洲国产成人午夜在线一区| 一本一本久久| 久久精品免费播放| 欧美激情中文字幕乱码免费| 国产精品都在这里| 在线免费精品视频| 亚洲一区三区视频在线观看| 久久久免费精品| 99re视频这里只有精品| 午夜在线成人av| 欧美激情精品久久久久久久变态| 国产精品蜜臀在线观看| 亚洲国产精品专区久久| 亚洲一区影音先锋| 欧美电影免费观看高清| 这里只有精品视频在线| 久久免费高清视频| 国产精品亚洲不卡a| 亚洲动漫精品| 久久精品视频在线看| 亚洲国产高清一区| 性久久久久久| 国产精品福利影院| 亚洲精品视频在线观看免费| 久久久99免费视频| 一区二区三区欧美在线| 欧美va天堂在线| 黑人一区二区三区四区五区|