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

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>
            亚洲精品视频在线观看网站| 亚洲欧美日韩一区二区三区在线| 欧美在线视频网站| 国产麻豆日韩| 久久久欧美精品| 久久亚洲电影| 亚洲人体一区| 一区二区三区精密机械公司| 国产精品婷婷午夜在线观看| 久久久久久一区二区| 麻豆精品视频在线| 99人久久精品视频最新地址| 一区二区三区四区国产精品| 国产日韩欧美精品一区| 狼狼综合久久久久综合网 | 欧美中文日韩| 久久久久久亚洲精品杨幂换脸| 91久久精品国产91久久| 一区二区三区视频免费在线观看| 国产农村妇女毛片精品久久莱园子| 久久精品91| 欧美激情一区二区三区在线视频| 亚洲女女做受ⅹxx高潮| 久久精品国产一区二区三| 亚洲日本中文| 羞羞视频在线观看欧美| 亚洲欧洲日本专区| 亚洲欧美日韩国产一区二区| 亚洲国产日韩欧美在线99 | 欧美中在线观看| 久久香蕉精品| 午夜精品久久久久久久久久久久| 久久精品人人爽| 亚洲一区二区精品| 久久嫩草精品久久久精品| 亚洲视屏在线播放| 久热爱精品视频线路一| 亚洲欧美怡红院| 欧美成人免费在线视频| 欧美在线你懂的| 欧美精品一级| 欧美成人a视频| 国产欧美日韩在线| 99热这里只有精品8| 亚洲韩国青草视频| 亚洲在线第一页| 亚洲婷婷综合色高清在线| 久久野战av| 久久一区二区精品| 国产精品一区=区| 日韩午夜电影av| 亚洲精品四区| 麻豆精品在线视频| 久久婷婷av| 国一区二区在线观看| 亚洲一级在线观看| 亚洲女爱视频在线| 欧美三级中文字幕在线观看| 亚洲国产精品激情在线观看| 国内免费精品永久在线视频| 亚洲专区一区二区三区| 亚洲中字在线| 国产精品videossex久久发布| 亚洲精品三级| 亚洲视频综合在线| 国产精品久久久久久妇女6080 | 久久久久久久久久久久久久一区| 国产精品久久一区二区三区| 亚洲视频一起| 亚洲欧美激情四射在线日| 欧美性久久久| 亚洲午夜视频| 久久av一区二区三区漫画| 国产精品欧美一区喷水| 午夜精品久久久久久久蜜桃app | 亚洲欧洲精品天堂一级| 99国产精品久久久| 欧美日韩亚洲成人| 中文亚洲视频在线| 久久精品成人欧美大片古装| 国产亚洲精品久久久久婷婷瑜伽| 欧美在线亚洲一区| 另类综合日韩欧美亚洲| 91久久在线视频| 欧美日韩成人综合天天影院| 日韩小视频在线观看| 午夜精品一区二区三区电影天堂| 国产欧美一区二区三区国产幕精品| 久久成人精品| 欧美国产一区二区| 亚洲午夜久久久久久久久电影院 | 日韩一级免费观看| 欧美色区777第一页| 午夜国产不卡在线观看视频| 久热精品视频在线| 一本色道久久综合亚洲精品婷婷| 国产精品乱码一区二区三区| 久久久午夜电影| 99国内精品久久| 久久久水蜜桃| 在线一区免费观看| 国产一级精品aaaaa看| 欧美国产视频在线| 欧美一区二区三区视频免费| 亚洲国产日韩美| 久久福利资源站| 99在线精品视频在线观看| 国产美女精品视频| 欧美金8天国| 久久精品网址| 亚洲视频在线看| 欧美激情亚洲视频| 久久激情中文| 亚洲一区二区三区高清 | 欧美日韩国产在线播放网站| 欧美伊人久久久久久午夜久久久久| 亚洲国产精品悠悠久久琪琪 | 亚洲国产精品v| 国产日韩在线看| 欧美日韩免费一区二区三区视频| 久久精品国产91精品亚洲| 中日韩视频在线观看| 亚洲国产二区| 美脚丝袜一区二区三区在线观看| 亚洲欧美日韩综合一区| 亚洲精品综合久久中文字幕| 狠狠色伊人亚洲综合成人| 国产精品美女主播在线观看纯欲| 欧美韩国日本综合| 欧美.com| 欧美成人69av| 看片网站欧美日韩| 久久精品国产亚洲一区二区三区| 亚洲欧美国内爽妇网| 国产精品99久久久久久人| 亚洲日本中文| 亚洲国产日韩在线一区模特| 欧美国产日韩视频| 男女av一区三区二区色多| 老司机67194精品线观看| 久久久国际精品| 久久久亚洲精品一区二区三区 | 亚洲精品视频一区| 亚洲黄色天堂| 亚洲黄页视频免费观看| 亚洲激情欧美| 99精品国产在热久久婷婷| 亚洲国产一区二区精品专区| 亚洲国产欧美一区二区三区丁香婷| 樱桃国产成人精品视频| 在线观看精品| 亚洲精品日韩精品| 亚洲免费播放| 亚洲午夜av在线| 欧美与欧洲交xxxx免费观看| 久久精品青青大伊人av| 美女国产精品| 亚洲精品1区| 在线亚洲欧美| 欧美一级午夜免费电影| 久久久亚洲人| 欧美精品久久久久久久久老牛影院| 欧美日本一区二区三区| 国产精品九九| 激情欧美丁香| av不卡免费看| 久久精品国产96久久久香蕉| 免费成人黄色片| 日韩午夜av在线| 欧美一区=区| 欧美另类99xxxxx| 国产精品一香蕉国产线看观看 | 国产精品毛片| 激情欧美一区二区三区| 亚洲美女网站| 久久精品国产亚洲一区二区三区| 蜜桃av一区二区在线观看| 亚洲人成网站在线观看播放| 亚洲一区二区日本| 蜜桃av一区二区三区| 国产精品久久网站| 亚洲国产成人久久综合| 午夜精品久久久久久久99热浪潮| 久久欧美中文字幕| 99精品欧美一区二区三区综合在线| 亚洲欧美成人一区二区三区| 欧美sm视频| 国产亚洲一区二区三区在线观看 | 国产午夜精品久久久| 亚洲卡通欧美制服中文| 久久九九热re6这里有精品 | 久久不射网站| 亚洲日本va午夜在线电影| 久久精品国产欧美亚洲人人爽| 欧美日韩的一区二区| 亚洲成在人线av| 久久国产福利| 亚洲少妇诱惑| 欧美日韩成人在线观看| 91久久久久|