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

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>
            国产真实精品久久二三区| 亚洲精品男同| 国产一区二区三区久久悠悠色av| 欧美日韩另类在线| 欧美日韩一区国产| 国产精品日韩在线| 国产一区av在线| 在线欧美亚洲| 一区二区欧美精品| 亚洲一区二区三区在线观看视频| 亚洲综合色噜噜狠狠| 久久国产精品99国产| 久久夜色精品一区| 久热精品视频在线观看| 欧美成人国产| avtt综合网| 欧美一区二区三区免费观看视频| 翔田千里一区二区| 欧美激情按摩在线| 国产精品露脸自拍| 亚洲高清免费在线| 亚洲女人av| 欧美国产精品人人做人人爱| 亚洲免费激情| 久久久蜜桃一区二区人| 欧美日韩综合一区| 亚洲国产精品一区二区三区| 午夜在线观看欧美| 亚洲每日更新| 久久综合电影一区| 国产女主播一区二区| 99在线精品视频| 榴莲视频成人在线观看| 亚洲视频欧美视频| 欧美精品少妇一区二区三区| 国产一区二区久久精品| 亚洲无线观看| 亚洲人成欧美中文字幕| 午夜亚洲福利| 国产精品mm| 99国产麻豆精品| 欧美激情精品久久久久久免费印度 | 欧美激情一区二区三区蜜桃视频| 亚洲女同性videos| 欧美视频不卡| 在线亚洲一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲影视在线| 国产精品国产三级国产aⅴ入口 | 国产美女精品人人做人人爽| 亚洲激情视频| 免费在线成人av| 久久精品一二三区| 狠狠色丁香婷婷综合| 欧美在线视频一区| 午夜精品www| 国产亚洲欧洲| 久久久一区二区| 久久高清免费观看| 在线观看成人小视频| 欧美不卡在线视频| 欧美黑人国产人伦爽爽爽| 亚洲卡通欧美制服中文| 国产一区二区无遮挡| 午夜精品久久久久久久久久久久| 美日韩精品免费| 久久婷婷一区| 亚洲福利在线视频| 亚洲国产日韩美| 欧美日韩在线视频首页| 性欧美1819性猛交| 欧美影院一区| 亚洲激情在线| 一区二区三区久久精品| 国产精品一二三四| 久久久久久久久久久一区| 久久久99国产精品免费| 亚洲精品久久久久久久久久久久| 亚洲精品久久久久久下一站| 国产精品二区二区三区| 久久精品理论片| 毛片av中文字幕一区二区| 亚洲人成在线播放网站岛国| 亚洲精品一区在线观看| 国产嫩草一区二区三区在线观看 | 欧美福利在线| 欧美黑人在线观看| 先锋影音国产精品| 久久久综合精品| 亚洲一区二区三区777| 欧美在线地址| 一本色道久久88综合亚洲精品ⅰ| 亚洲欧美国产制服动漫| 亚洲破处大片| 性欧美18~19sex高清播放| 亚洲人成在线观看| 午夜精品久久久久久久99热浪潮 | 久久福利资源站| 男女精品网站| 午夜亚洲伦理| 欧美激情一区三区| 久久久久久成人| 欧美片网站免费| 久久综合伊人77777蜜臀| 欧美日韩视频在线| 欧美91精品| 国产一区二区三区直播精品电影 | 亚洲欧美日韩一区二区三区在线观看| 亚洲国产成人av| 欧美中文字幕在线视频| 亚洲一区二区在线免费观看| 久久人人97超碰国产公开结果 | 欧美在线观看视频在线| 欧美黄色日本| 老司机久久99久久精品播放免费 | 99re这里只有精品6| 久久久999国产| 欧美亚洲一区二区三区| 欧美日韩国产综合网| 欧美激情一区二区三区蜜桃视频| 国产一区二区三区四区三区四| 99香蕉国产精品偷在线观看| 亚洲风情亚aⅴ在线发布| 欧美在线|欧美| 久久成人免费网| 国产精品麻豆成人av电影艾秋 | 一区二区三区蜜桃网| 亚洲精品乱码久久久久| 久久婷婷久久| 免费观看成人| 亚洲福利av| 免费不卡在线视频| 亚洲电影免费观看高清完整版| 激情五月综合色婷婷一区二区| 亚欧美中日韩视频| 久久久午夜电影| 136国产福利精品导航| 久久精品国产欧美亚洲人人爽| 久久精品国产欧美激情| 国内久久精品视频| 久久久久久91香蕉国产| 欧美 日韩 国产一区二区在线视频 | 国产精品久在线观看| 亚洲一区二区免费| 欧美主播一区二区三区| 国产日韩av在线播放| 欧美影院视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美一区二区高清| 久久久久久久久久久一区 | 久久久午夜电影| 欧美激情视频网站| 99在线视频精品| 国产精品丝袜白浆摸在线| 欧美一级二区| 欧美成人久久| 亚洲无玛一区| 合欧美一区二区三区| 每日更新成人在线视频| 亚洲最新色图| 久久婷婷综合激情| 亚洲人成网站色ww在线| 国产精品免费区二区三区观看| 久久国产66| 一本色道久久88综合亚洲精品ⅰ| 久久精品国产成人| 亚洲精品一区在线观看| 国产欧美精品在线播放| 麻豆成人在线播放| 亚洲一区成人| 亚洲福利久久| 欧美风情在线| 欧美插天视频在线播放| 亚洲香蕉伊综合在人在线视看| 国产精品一区二区在线观看网站| 久久午夜电影| 亚洲一区二区网站| 亚洲电影免费观看高清| 欧美在线视频一区二区| 亚洲免费成人| 黄色精品网站| 国产精品视频xxxx| 欧美久久成人| 浪潮色综合久久天堂| 亚洲午夜精品福利| 亚洲欧洲三级| 欧美成人精品影院| 欧美一区二区三区四区夜夜大片| 亚洲毛片av在线| 伊甸园精品99久久久久久| 国产精品爽爽爽| 欧美视频在线观看 亚洲欧| 免播放器亚洲| 久久综合狠狠综合久久综合88 | 欧美一区二视频在线免费观看| 亚洲免费高清| 最新日韩欧美| 欧美激情国产日韩精品一区18| 久久一区二区三区av| 欧美中文字幕不卡|