MFC 建立多執行緒應用程式

2021-08-27 00:12:55 字數 4166 閱讀 9015

microsoft基礎類(mfc)庫為多執行緒應用程式提供支援。 執行緒是程序內的執行路徑。 當您啟動記事本時,作業系統會建立乙個程序並開始執行該程序的主線程。 當該執行緒終止時,該過程也是如此。

如果需要,可以在應用程式中建立其他執行緒。 mfc應用程式中的所有執行緒都由cwinthread物件表示。 在大多數情況下,您甚至不必顯式建立這些物件; 而是呼叫框架幫助函式afxbeginthread,它為您建立cwinthread物件。

如果需要,可以在應用程式中建立其他執行緒。 mfc應用程式中的所有執行緒都由cwinthread物件表示。 在大多數情況下,您甚至不必顯式建立這些物件; 而是呼叫框架幫助函式afxbeginthread,它為您建立cwinthread物件。

讓我們通過建立乙個新的基於mfc對話方塊的應用程式來檢視乙個簡單的示例。

第1步 - 將static控制項的標題和id更改為分別單擊「開始執行緒」按鈕和「idc_static_text」。

第2步 - 拖動button按鈕並為這些按鈕新增單擊事件處理程式。

第3步 - 為靜態文字控制項新增控制變數。

在cmfcmultithreadingdlg.h檔案中新增:

private:

cstatic m_text;

第4步- 現在在cmfcmultithreadingdlg.cpp檔案的開頭新增以下三個全域性變數。

int currvalue;

int maxvalue;

bool stopnow;

步驟5 - 在cmfcmultithreadingdlg類中新增wm_timer訊息。 這是ontimer()的實現

void ccmfcmultithreadingdlg::ontimer(uint_ptr nidevent)

步驟6 - 現在新增乙個樣本函式,用於在cmfcmultithreadingdlg類中的afxbeginthread中使用

uint mythreadproc(lpvoid param) 

return true;

}

第7步 - 這是開始執行緒按鈕的事件處理程式的實現,它將啟動執行緒。

void ccmfcmultithreadingdlg::onbnclickedbuttonstart()

第8步 - 這是「停止執行緒」按鈕的事件處理程式的實現,它將停止執行緒。

void ccmfcmultithreadingdlg::onbnclickedbuttonstop()

第9步 - 這是完整的原始檔。

// cmfcmultithreadingdlg.cpp : 實現檔案

//#include "stdafx.h"

#include "cmfcmultithreading.h"

#include "cmfcmultithreadingdlg.h"

#include "afxdialogex.h"

#ifdef _debug

#define new debug_new

#endif

//新增3個全域性變數

int currvalue;

int maxvalue;

bool stopnow;

// 用於應用程式「關於」選單項的 caboutdlg 對話方塊

class caboutdlg : public cdialogex

;#endif

protected:

virtual void dodataexchange(cdataexchange* pdx); // ddx/ddv 支援

// 實現

protected:

declare_message_map()

};caboutdlg::caboutdlg() : cdialogex(idd_aboutbox)

void caboutdlg::dodataexchange(cdataexchange* pdx)

begin_message_map(caboutdlg, cdialogex)

end_message_map()

// ccmfcmultithreadingdlg 對話方塊

ccmfcmultithreadingdlg::ccmfcmultithreadingdlg(cwnd* pparent /*=null*/)

: cdialogex(idd_cmfcmultithreading_dialog, pparent)

void ccmfcmultithreadingdlg::dodataexchange(cdataexchange* pdx)

begin_message_map(ccmfcmultithreadingdlg, cdialogex)

on_wm_syscommand()

on_wm_paint()

on_wm_querydragicon()

on_wm_timer()

on_bn_clicked(idc_button_start, &ccmfcmultithreadingdlg::onbnclickedbuttonstart)

on_bn_clicked(idc_button_stop, &ccmfcmultithreadingdlg::onbnclickedbuttonstop)

end_message_map()

// ccmfcmultithreadingdlg 訊息處理程式

bool ccmfcmultithreadingdlg::oninitdialog()

} // 設定此對話方塊的圖示。 當應用程式主視窗不是對話方塊時,框架將自動

// 執行此操作

seticon(m_hicon, true); // 設定大圖示

seticon(m_hicon, false); // 設定小圖示

// todo: 在此新增額外的初始化**

return true; // 除非將焦點設定到控制項,否則返回 true

}void ccmfcmultithreadingdlg::onsyscommand(uint nid, lparam lparam)

else }

// 如果向對話方塊新增最小化按鈕,則需要下面的**

// 來繪製該圖示。 對於使用文件/檢視模型的 mfc 應用程式,

// 這將由框架自動完成。

void ccmfcmultithreadingdlg::onpaint()

else }

//當使用者拖動最小化視窗時系統呼叫此函式取得游標

//顯示。

hcursor ccmfcmultithreadingdlg::onquerydragicon()

//步驟5 - 在cmfcmultithreadingdlg類中新增wm_timer訊息。 這是ontimer()的實現

void ccmfcmultithreadingdlg::ontimer(uint_ptr nidevent)

//步驟6 - 現在新增乙個示例函式,用於在cmfcmultithreadingdlg類中的afxbeginthread中使用。

uint mythreadproc(lpvoid param)

return true;

}//第7步 - 這是啟動執行緒按鈕的事件處理程式的實現,它將啟動執行緒。

void ccmfcmultithreadingdlg::onbnclickedbuttonstart()

//第8步 - 這是stop thread按鈕的事件處理程式的實現,它將停止執行緒

void ccmfcmultithreadingdlg::onbnclickedbuttonstop()

《全文完》

note:

本文翻譯原文:

建立多執行緒應用程式

定義命名空間在.net中,多執行緒功能是在system.threading命名空間中定義的。usingsystem.threading 啟動執行緒system.threading命名空間中的thread類代表乙個執行緒物件,用這個類物件可以建立新的執行緒,刪除 暫停和恢復執行緒。下面的 使用thre...

建立多執行緒應用程式

定義命名空間 在.中,多執行緒功能是在system.threading命名空間中定義的。usingsystem.threading 啟動執行緒 system.threading命名空間中的thread類代表乙個執行緒物件,用這個類物件可以建立新的執行緒,刪除 暫停和恢復執行緒。下面的 使用threa...

建立多執行緒應用程式

定義命名空間 在.net中,多執行緒功能是在system.threading命名空間中定義的。using system.threading 啟動執行緒 system.threading命名空間中的thread類代表乙個執行緒物件,用這個類物件可以建立新的執行緒,刪除 暫停和恢復執行緒。下面的 使用t...