亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ AfxBeginThread的介紹/基本用法

2020-01-26 15:05:01
字體:
來源:轉載
供稿:網友

AfxBeginThread 

   用戶界面線程和工作者線程都是由AfxBeginThread創建的。現在,考察該函數:MFC提供了兩個重載版的AfxBeginThread,一個用于用戶界面線程,另一個用于工作者線程,分別有如下的原型和過程:

用戶界面線程的AfxBeginThread
用戶界面線程的AfxBeginThread的原型如下:

CWinThread* AFXAPI AfxBeginThread(CRuntimeClass* pThreadClass,int nPriority,UINT nStackSize,DWORD dwCreateFlags,LPSECURITY_ATTRIBUTES lpSecurityAttrs)

其中:
參數1是從CWinThread派生的RUNTIME_CLASS類;
參數2指定線程優先級,如果為0,則與創建該線程的線程相同;
參數3指定線程的堆棧大小,如果為0,則與創建該線程的線程相同;
參數4是一個創建標識,如果是CREATE_SUSPENDED,則在懸掛狀態創建線程,在線程創建后線程掛起,否則線程在創建后開始線程的執行。
參數5表示線程的安全屬性,NT下有用。

工作者線程的AfxBeginThread
工作者線程的AfxBeginThread的原型如下:

CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc,LPVOID pParam,int nPriority,UINT nStackSize,DWORD dwCreateFlags,LPSECURITY_ATTRIBUTES lpSecurityAttrs)

其中:
參數1  線程的入口函數,聲明一定要如下: UINT MyThreadFunction( LPVOID pParam );
參數2 傳遞入線程的參數,注意它的類型為:LPVOID,所以我們可以傳遞一個結構體入線程.
參數3、4、5分別指定線程的優先級、堆棧大小、創建標識、安全屬性,含義同用戶界面線程。

附錄A:

結束線程的兩種方式
     當你在后臺用線程來打印一些圖形時.有時在打印一部分后,你希望可以停下來,那么此如何讓線程停止呢.下

面會詳細的向你解釋要結束線程的兩種方式

     1 : 這是最簡單的方式,也就是讓線程函數執行完成,此時線程正常結束.它會返回一個值,一般0是成功結束,

當然你可以定義自己的認為合適的值來代表線程成功執行.在線程內調用AfxEndThread將會直接結束線程,此時線程的一切資源都會被回收.

     2 : 如果你想讓別一個線程B來結束線程A,那么,你就需要在這兩個線程中傳遞信息.不管是工作者線程還是界面線程,如果你想在線程結束后得到它的確結果,那么你可以調用     ::GetExitCodeThread函數

還是老師的那個項目,以前由于計算量太大,導致程序經常出現假死的現象,因為程序只有一個線程,該線程主要用于處理計算上了,而對于消息隊列的響應被忽略了。因此解決的辦法就是用兩個線程,一個線程用于計算,一個線程用于處理消息。

      到網上找了一些資料,發現在MFC中把線程分為兩類,一類為界面線程,一類為工作線程。兩者的區別在于前都能夠處理消息響應,而后者則不能。對于該項目來說,只要把計算的過程放到一個工作線程里來進行就可以了。

    現在先試一下,我新建了一個對話框,上面添加兩個按鈕,一個是start 一個是dialog。前者用于開始計算,而后者則彈出一個消息框。然后向該對話框里面添加一個死循環的函數

UINT CMultithreadDlg::jisuan(LPVOID lpParam){int i = 1;for (;;){  i+=i;}return 0;}

    然后在start按鈕的響應函數上添加上jisuan(NULL);即可,現在運行程序,按下start按鈕后,可以看到CPU使用率漲到了100%,這個時候再按dialog按鈕無反應,拖動關閉窗口均無效。這就是前面提到的假死現象(實際上是真死,因為死循環了,如果不是死循環,而只是計算量太大才是假死)。

    下面用多線程的方法來解決,在start按鈕的響應函數改為

CWinThread* mythread = AfxBeginThread(  jisuan,  NULL,  THREAD_PRIORITY_NORMAL,  0,  0,  NULL  );

    運行,結果發現有錯error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)' Generating Code...
我就納悶了,函數指針是對的啊,原來 線程函數可以且必須是全局函數或者是靜態成員函數。
所以我們在線程函數的聲明中改為 static UINT jisuan(LPVOID lpParam);即可,然后運行程序,這時點擊start,待CPU漲至100%后,點擊dialog,彈出對話框了,拖動、關閉窗口均沒問題了。

     其實上面的那個AfxBeginThread,除前面兩個參數外,后面的都是默認參數,可以省略。而必須有的這兩個參數,一個是線程函數的指針,一個是傳遞給這個函數的參數。實際中我們經常這樣用 AfxBeginThread(ThreadProc,this);//把this傳過去,就可以調用類的成員了. 這樣線程函數就可以使用和操作類的成員了。千萬要注意線程函數是靜態類函數成員。

    線程是創建了,但是如果中途要暫停該怎么做呢?

    我們在創建線程的時候獲得了一個CWinThread的指針,這是一個指向線程對象的指針,CWinThread類里面就有暫停與恢復的函數,下面我就演示一下。

在原來的程序上進行改動。向對話框類里面添加一個CWinThread* 的成員變量,不用初始化為NULL,這樣會報錯的,因為它只能通過AfxBeginThread函數獲得。把start里面的聲明去掉。
然后添加一個 pause 按鈕向其響應函數里面添加代碼 mythread->SuspendThread();   再添加一個 resume按鈕,向其響應函數里面添加 mythread->ResumeThread();
    再運行程序,我們start之后,按下pause可以看到CPU恢復正常,然后resume,CPU又漲上去了,到此證明一切操作正常。

具體 總結如下

AfxBeginThread創建線程

1.聲明線程函數:

UINT StartDownloadThread(LPVOID pParam);    // 下載線程,
2.創建線程:

CWinThread* m_pThread;     // 線程對象指針// 創建多線程void CMyDownloadDlg::CreateThread(CDLoadThread* pDloadThread){  // 創建響應線程,啟動線程函數  m_pThread = AfxBeginThread(StartDownloadThread, (LPVOID)pDloadThread);  if(NULL == m_pThread)  {    TRACE("創建新的線程出錯!/n");    return;  }}

 3.定義線程函數  

UINT StartDownloadThread(LPVOID pParam){  // 為每個線程(任務數)創建一個套接字來完成下載  CDLoadThread* pThis = (CDLoadThread*)pParam;  LONG indexTask = 0;  //indexTask = pThis->m_indexThread;  LONG indextNum = pThis->httpDload.m_index;  InterlockedIncrement(&pThis->httpDload.m_index); // 互斥方法訪問共享資源,防止沖突  int ret = pThis->httpDload.CreateThreadFunc(indexTask, indextNum);    //TRACE("線程%d已成功完成!%d/n", index, ret);  return 0;}

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久视频精品| 日韩中文字幕视频在线| 日本精品久久中文字幕佐佐木| 欧美国产亚洲视频| 色噜噜国产精品视频一区二区| 97视频在线观看播放| 亚洲白虎美女被爆操| 欧美精品第一页在线播放| 日韩二区三区在线| 久久天天躁狠狠躁夜夜av| 北条麻妃在线一区二区| 欧美精品精品精品精品免费| 77777少妇光屁股久久一区| 成人亲热视频网站| 精品视频中文字幕| 91精品久久久久久| 欧美日韩免费区域视频在线观看| 精品福利在线看| 日本久久中文字幕| 日韩电影在线观看永久视频免费网站| 91丨九色丨国产在线| 91精品久久久久久久久久久久久久| 久久久久久美女| 在线视频欧美日韩精品| 亚洲精品动漫久久久久| 久久激情五月丁香伊人| 国产91成人在在线播放| 欧美日韩黄色大片| 欧美裸体xxxx| 亚洲免费视频网站| 久久99热精品这里久久精品| 91国产精品视频在线| 日韩av网址在线观看| 国产精品视频地址| 亚洲国产精品999| 亚洲第一福利网站| 亚洲欧美日韩一区二区在线| 色噜噜狠狠色综合网图区| 日本一区二三区好的精华液| 亚洲男人天堂2019| 91精品国产综合久久久久久蜜臀| 欧美日韩亚洲国产一区| 国产精品三级美女白浆呻吟| 日韩一区二区三区在线播放| 国产日韩欧美视频| 精品久久久久久久久久ntr影视| 亚洲国产精久久久久久久| 97激碰免费视频| 亚洲精品国产福利| 国产精品av网站| 欲色天天网综合久久| 亚洲欧洲中文天堂| 国产精品91久久久| 国产精品三级美女白浆呻吟| 日韩精品在线观| 夜夜嗨av色一区二区不卡| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品午夜视频| 国产精品视频永久免费播放| 性色av一区二区三区免费| 国产精品一香蕉国产线看观看| 亲子乱一区二区三区电影| 国产亚洲激情视频在线| 亚洲一区二区三区sesese| 国外成人免费在线播放| 欧美成人小视频| 中文亚洲视频在线| 久久99国产精品自在自在app| 92裸体在线视频网站| 欧美疯狂xxxx大交乱88av| 久久人人爽人人爽爽久久| 欧美xxxx14xxxxx性爽| 欧美日韩在线一区| 国产一区二区三区久久精品| 精品国产一区久久久| 美日韩精品免费观看视频| 亚洲综合视频1区| 国产精品久久久久久久久久久久| 亚洲视频在线视频| 亚洲自拍偷拍色图| 麻豆国产va免费精品高清在线| 亚洲人成在线观看网站高清| 久久精品99久久香蕉国产色戒| 亚洲美女在线视频| 91天堂在线视频| 久久久久久久久中文字幕| 国产亚洲人成a一在线v站| 欧美在线视频a| 精品中文字幕乱| 欧美激情第1页| 中文字幕亚洲欧美日韩高清| 国产精品羞羞答答| 91久久精品国产91久久性色| 伊人久久久久久久久久久| 在线视频亚洲欧美| 最好看的2019年中文视频| 久久精品小视频| 中文综合在线观看| 97视频在线观看免费高清完整版在线观看| 亚洲爱爱爱爱爱| 欧美成人精品在线播放| 成人免费看黄网站| 精品久久久久久久久久ntr影视| 91社影院在线观看| 色婷婷综合成人av| 国产精品精品视频一区二区三区| 中文字幕无线精品亚洲乱码一区| 色av中文字幕一区| 97视频在线播放| 日韩成人中文字幕在线观看| 欧美成人午夜激情| 久久综合久久88| 欧美中文在线观看国产| 日本精品视频在线观看| 国产在线高清精品| 日韩成人在线视频| 欧美日韩国产精品一区二区不卡中文| 精品丝袜一区二区三区| 精品福利在线观看| 欧美日韩中文在线观看| 亚洲午夜精品久久久久久性色| 人妖精品videosex性欧美| 日本国产一区二区三区| 久久久久久久久久久免费精品| 亚洲大胆人体在线| 亚洲高清久久久久久| 91超碰caoporn97人人| 国产精品视频网址| 国产97在线|日韩| 成人精品一区二区三区电影黑人| 亚洲字幕在线观看| 国产精品男人的天堂| 国产精品国内视频| 国产精品视频xxx| 日韩一区二区久久久| 亚洲精选一区二区| 日韩国产欧美精品在线| 国产日韩在线亚洲字幕中文| 日韩中文字幕在线观看| 亚洲一区二区三区sesese| 日本高清不卡在线| 国产精品一区专区欧美日韩| 6080yy精品一区二区三区| 欧美日韩在线观看视频小说| 日本sm极度另类视频| 国产98色在线| 一级做a爰片久久毛片美女图片| 国产一区二区三区直播精品电影| 国产精品免费久久久| 78m国产成人精品视频| 欧美伊久线香蕉线新在线| 国产69精品久久久久9999| 亚洲精品久久久久中文字幕二区| 久久成人精品一区二区三区| 日韩av电影国产| 久久国产一区二区三区| 91久久国产精品91久久性色| 欧洲亚洲女同hd| 久久久久久久久久久成人| 91视频国产高清| 久久久国产精品亚洲一区| 国产97色在线|日韩| 91久久精品美女高潮| 性欧美在线看片a免费观看|