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

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久久精品色噜噜导演| 在线观看欧美精品| 亚洲国产老妈| 国产精品成人免费| 久久久久久久一区二区三区| 久久久爽爽爽美女图片| 亚洲麻豆av| 亚洲一区二区毛片| 国产一区二区三区高清播放| 蜜臀av在线播放一区二区三区| 欧美大片在线看| 亚洲综合日本| 久久久综合视频| 亚洲午夜精品福利| 久久9热精品视频| 99在线|亚洲一区二区| 亚洲一区自拍| 亚洲精品久久视频| 新67194成人永久网站| 亚洲欧洲在线免费| 亚洲欧美亚洲| 99视频在线精品国自产拍免费观看 | 欧美手机在线| 久久一日本道色综合久久| 欧美日韩xxxxx| 麻豆av福利av久久av| 国产精品户外野外| 亚洲黄色尤物视频| 韩国一区二区三区美女美女秀| 亚洲精品乱码久久久久久| 国语自产精品视频在线看抢先版结局 | 国产亚洲精品成人av久久ww| 欧美激情综合| 国产精品亚洲精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美a一区二区| 亚洲视频在线观看网站| 久久婷婷影院| 亚洲综合色婷婷| 欧美国产视频一区二区| 性xx色xx综合久久久xx| 欧美日韩国产一级片| 久久久女女女女999久久| 欧美视频在线免费看| 牛夜精品久久久久久久99黑人 | 最新日韩欧美| 黄色日韩在线| 欧美一级二区| 亚洲视频中文字幕| 欧美日韩精品免费观看| 久久影视精品| 伊人婷婷欧美激情| 亚洲午夜激情在线| 在线观看日韩| 久久久成人精品| 欧美在线观看视频在线| 国产精品一区二区三区久久久| 亚洲国产高清一区| 日韩一级不卡| 免费看黄裸体一级大秀欧美| 亚洲成人中文| 亚洲成色www久久网站| 久久精品首页| 久久久久久自在自线| 国外成人在线视频网站| 午夜精品福利一区二区蜜股av| 性视频1819p久久| 国产精品国产三级国产专播品爱网| 日韩写真视频在线观看| 9久草视频在线视频精品| 欧美日韩不卡合集视频| 亚洲国产欧美在线人成| 精品动漫av| 久久精品主播| 亚洲欧美精品在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久 | 国产精品久久亚洲7777| 99综合精品| 欧美在线视频在线播放完整版免费观看 | 这里是久久伊人| 久久岛国电影| 国内精品久久久久久久影视蜜臀| 久久久久久久久久久久久久一区| 老司机一区二区三区| 亚洲免费精品| 欧美日韩在线免费观看| 亚洲欧美网站| 免费精品视频| 亚洲大片一区二区三区| 牛牛影视久久网| 久久亚洲欧洲| 亚洲一区二区三| 国产精品黄页免费高清在线观看| 久久久www成人免费无遮挡大片 | 久久www免费人成看片高清| 国产美女一区二区| 羞羞漫画18久久大片| 亚洲成色最大综合在线| 亚洲精品综合精品自拍| 国产精品视频yy9299一区| 欧美一区在线视频| 99精品国产在热久久婷婷| 欧美一区二区三区四区视频| 亚洲激情视频在线观看| 欧美午夜国产| 欧美激情精品久久久六区热门| 日韩视频在线观看免费| 免费久久精品视频| 一本一道久久综合狠狠老精东影业 | 欧美大成色www永久网站婷| 亚洲男人的天堂在线观看| 国内精品亚洲| 国产精品一区免费观看| 麻豆免费精品视频| 欧美一区二区视频观看视频| 欧美激情一区二区三区高清视频| 久久精品一区二区三区中文字幕| 亚洲国产va精品久久久不卡综合| 国产欧美日韩精品a在线观看| 美女诱惑一区| 久久亚洲一区二区三区四区| 99视频精品全部免费在线| 欧美国产精品日韩| 欧美一区二区三区四区在线观看地址 | 另类尿喷潮videofree| 欧美一级在线播放| 亚洲免费高清| 日韩一区二区高清| 在线观看91精品国产入口| 国产亚洲精品自拍| 国产精品久久久久免费a∨大胸| 欧美精选一区| 女生裸体视频一区二区三区| 久久全球大尺度高清视频| 亚洲欧美日韩精品在线| 亚洲欧美第一页| 一区二区三区四区五区精品视频 | av成人国产| av成人毛片| 亚洲欧洲一级| 日韩视频在线免费| 最新国产精品拍自在线播放| 亚洲国产天堂网精品网站| 国户精品久久久久久久久久久不卡| 国产日韩欧美一区二区三区在线观看 | 亚洲第一搞黄网站| 亚洲电影第三页| 国产日韩欧美自拍| 国产午夜久久| 国产综合久久| 国产综合欧美在线看| 狠狠色狠狠色综合日日五| 国产欧美一区二区精品性 | 亚洲一区二区免费看| 亚洲视频999| 亚洲私人影吧| 久久av在线| 久久精品91久久香蕉加勒比| 免费短视频成人日韩| 美日韩免费视频| 欧美视频在线免费看| 国产精品xnxxcom| 一区精品在线| 亚洲国产精品久久精品怡红院| 亚洲久久一区二区| 一区二区欧美激情| 久久精品一级爱片| 免费日韩成人| 一区二区三区四区国产| 99精品国产99久久久久久福利| 性欧美超级视频| 亚洲欧美国产日韩中文字幕| 久久久久久久综合色一本| 久久久久成人网| 欧美日韩人人澡狠狠躁视频| 国产情侣一区| 亚洲人成网站在线观看播放| 亚洲女同同性videoxma| 久久久久国产精品www| 亚洲人久久久| 午夜精品久久久久久久男人的天堂| 久久男人资源视频| 欧美日韩一二三四五区| 在线精品视频免费观看| 一区二区免费在线观看| 蜜臀av性久久久久蜜臀aⅴ| 亚洲欧洲在线观看| 久久精品视频va| 欧美日韩亚洲一区二区三区在线观看| 狠狠色狠狠色综合日日五| av成人毛片| 亚洲国产精品精华液2区45|