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

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>
            亚洲成人自拍视频| 欧美精品国产精品| 亚洲欧美日韩中文播放| 红杏aⅴ成人免费视频| 国产精品激情电影| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久 | 亚洲韩国日本中文字幕| 亚洲激情国产精品| 亚洲永久网站| 国产精品福利在线观看网址| 国精品一区二区三区| 韩国av一区二区三区| 国产亚洲毛片在线| 国内外成人免费激情在线视频| 国产精品久久久久毛片大屁完整版 | 亚洲三级性片| 亚洲人成在线播放网站岛国| 亚洲福利视频网| 亚洲区中文字幕| 在线播放亚洲| 亚洲毛片在线看| 在线综合亚洲欧美在线视频| 亚洲欧美欧美一区二区三区| 夜夜嗨av一区二区三区四季av| 亚洲精品在线免费观看视频| 亚洲福利视频免费观看| 亚洲欧美中文日韩v在线观看| 性18欧美另类| 美玉足脚交一区二区三区图片| 亚洲精品欧美一区二区三区| 亚洲一级在线| 久久综合九色九九| 欧美伊人久久| 欧美精品精品一区| 国产午夜精品一区二区三区欧美| 在线观看中文字幕不卡| 亚洲视频日本| 一区二区三区色| 欧美在线观看一区二区| 亚洲一区二区免费在线| 久久久水蜜桃av免费网站| 亚洲人成在线影院| 欧美亚洲专区| 亚洲国产cao| 久久精品成人欧美大片古装| 国产精品99久久99久久久二8 | 亚洲欧洲一二三| 亚洲欧美久久| 亚洲视频在线一区观看| 久久一区二区视频| 国产精品免费一区豆花| 又紧又大又爽精品一区二区| 久久久蜜桃一区二区人| av成人免费在线观看| 午夜综合激情| 老司机成人网| 欧美伦理视频网站| 尤物yw午夜国产精品视频明星| 亚洲乱码视频| 久久综合色播五月| 欧美一区二区三区电影在线观看| 在线观看亚洲a| 性伦欧美刺激片在线观看| 在线精品亚洲一区二区| 亚洲丝袜av一区| 免费精品99久久国产综合精品| 欧美激情一区二区| 久久综合亚洲社区| 国产亚洲欧洲997久久综合| 正在播放亚洲| 亚洲视频精品| 欧美日韩中文在线观看| 亚洲美女黄色| 一区二区三区视频在线| 欧美成人亚洲成人| 久久精品免费观看| 国产亚洲a∨片在线观看| 小黄鸭精品aⅴ导航网站入口| 在线亚洲免费| 国产精品激情电影| 亚洲免费电影在线观看| 亚洲精品专区| 欧美人与性禽动交情品| 一区二区三区视频在线 | 美女国产一区| 美女脱光内衣内裤视频久久网站| 在线看一区二区| 欧美国产先锋| 欧美成人久久| 亚洲一卡二卡三卡四卡五卡| 99视频+国产日韩欧美| 久久久精彩视频| 欧美大片免费| 久久激情久久| 欧美日韩99| 亚洲欧美另类在线观看| 久久精品1区| 亚洲淫性视频| 免费观看成人网| 午夜精品久久久久久| 国产一区二区三区日韩欧美| 欧美好骚综合网| 亚洲免费在线观看| 羞羞漫画18久久大片| 亚洲免费成人av| 久久深夜福利| 麻豆国产精品777777在线| 欧美日韩一区二区三区在线观看免| 日韩天堂在线观看| 一本色道久久精品| 一本色道久久精品| 一区二区在线视频| 亚洲国产精品国自产拍av秋霞| 欧美激情久久久| 日韩一级大片在线| 一区二区三区日韩精品| 国产主播精品在线| 日韩西西人体444www| 亚洲国产精品成人精品| 亚洲视频在线视频| 亚洲国产日韩欧美| 欧美一区二区视频免费观看| 亚洲美女区一区| 亚洲欧美在线一区二区| 亚洲第一二三四五区| 欧美在线网址| 久久久久久69| 国产视频一区二区在线观看| 亚洲天堂网在线观看| 亚洲一区成人| 欧美日韩亚洲国产一区| 91久久精品日日躁夜夜躁国产| 极品尤物久久久av免费看| 久久精品国产99国产精品| 久久www免费人成看片高清| 国产精品久久久久久亚洲毛片| 亚洲视频在线观看| 影视先锋久久| 一本色道久久99精品综合| 欧美主播一区二区三区美女 久久精品人 | 最新中文字幕一区二区三区| 午夜精品剧场| 午夜精品三级视频福利| 亚洲综合999| 麻豆成人精品| 麻豆成人综合网| 亚洲欧美日韩精品久久亚洲区 | 久久精品72免费观看| 亚洲国产精品久久久久秋霞蜜臀| 欧美精品日韩精品| 欧美精品入口| 欧美日韩一二三区| 欧美新色视频| 亚洲精品视频在线看| 伊甸园精品99久久久久久| 欧美第一黄色网| 亚洲激情影视| 欧美精品97| 亚洲视频在线观看免费| 欧美在线亚洲综合一区| 在线观看日韩www视频免费 | 一本久道久久综合狠狠爱| 欧美日韩在线观看一区二区三区| 中日韩美女免费视频网站在线观看| 欧美在线播放视频| 亚洲国产高清自拍| 欧美日韩一区免费| 午夜精彩视频在线观看不卡| 免费成人你懂的| 一区二区三区四区精品| 国产欧美日韩一区| 欧美国产视频日韩| 亚欧成人在线| 亚洲电影免费在线| 午夜精品久久久久久久久久久久久 | 99这里只有久久精品视频| 国产欧美日韩一级| 欧美xx视频| 久久精品青青大伊人av| 欧美日韩一区二区三区四区五区| 羞羞漫画18久久大片| 亚洲欧洲三级电影| 麻豆精品网站| 亚洲黄色影院| 蜜臀91精品一区二区三区| 午夜国产精品影院在线观看| 欧美日韩一区二区在线视频| 亚洲色图制服丝袜| 亚洲美女av网站| 亚洲承认在线| 亚洲精品韩国| 欧美亚洲一区二区在线| 亚洲丁香婷深爱综合| 国产精品美女久久久免费| 久久夜色精品亚洲噜噜国产mv| 亚洲一区二区免费| 亚洲精品欧洲| 一级成人国产| 国产欧美精品一区二区三区介绍| 午夜在线不卡|