国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

C++ 關于MFC-多線程編程的注意事項

2019-11-02 14:25:32
字體:
來源:轉載
供稿:網友

   這篇文章主要介紹了C++ 關于MFC多線程編程的注意事項的相關資料,需要的朋友可以參考下

  在多線程編程中,最簡單的方法,無非就是利用 AfxBeginThread 來創建一個工作線程,看一下這個函數的說明:

  代碼如下:

  CWinThread* AFXAPI AfxBeginThread(

  AFX_THREADPROC pfnThreadProc,

  LPVOID pParam,

  int nPriority = THREAD_PRIORITY_NORMAL,

  UINT nStackSize = 0,

  DWORD dwCreateFlags = 0,

  LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL

  );

  在這個說明中,除第1和第2兩個參數外,余下的參數都有默認值。所以,我們在使用的時候,是必須要指定前兩個參數的。

  其中 第一個參數是 要運行的函數的名稱,光寫函數名就可以了,不能加引號。

  第二個參數,是指定 運行函數的 參數,這個參數的類型為 LPVOID 。所以要運行的函數的在傳遞過去后,要轉化為LPVOID類型才可以。

  而要運行的參數還有一個限制,那就是必須返回一個UINT類型的結果。所以要運行的函數的就有一個基本上固定的格式。

  UINT RunProce(LPVOID lpParam)

  在這里還需要特別說明一下,這個函數不能是實例函數,也就是函數前面是不能有 類限定符:: 的。如果是靜態函數也是可以的。

  在這個函數中,我們只能使用一個參數,而參數的類型只能是 LPVOID ,可以用一個結構體來封閉多個參數。

  余下的問題,就不是很多了。

  關于 多線程,就寫到這里吧!

  在多線程編程中,一個很重要的問題就是,要將線程的運行過程通知界面線程,做一些顯示方面的更新。如下載線程,在適當的時候,可以更新界面,現在下載到什么進度了。等等的情況。但是在工作線程中,是不是直接操作界面線程的控件的。那怎么辦呢,只能通過自定義一個消息來解決。

  工作流程,就是 在自定義線程中 通過發送一個界面上的 消息,來通知界面做一些更新操作。在這個自定義消息中,有一個細節要解決,那就是自定義消息,必須要指定接收消息的控件句柄。當然你中以使用m_pApp 直接通知主框架來解決,但是這樣解決似乎繞了一個很大的圈。其實解決的方法很簡單,那就是直接將接收消息的控件的句柄傳給自定義線程,就可以了。我們直接在線程中使用此句柄就可以解決了。

  我們知道控件的基類都是 CWnd。所以我們傳遞一個CWnd的指針進去。當然還有一些其它的參數要一塊傳遞進去,那就做一個結構吧

  代碼如下:

  typedef struct{

  CString srcString;

  CString DesString;

  CWnd* hander;

  }Param;

  這里我們傳遞了三個參數 兩個字符串一個指針。

  我們先造一個自定義線程函數

  代碼如下:

  UINT RunProce(LPVOID lpParam)

  {

  Param* par;

  CWnd* hander;

  par = (Param*)lpParam;

  hander = par->hander;

  myCopyDirectory(lpParam);

  CString str;

  str = "復制完成";

  hander->SendMessage(WM_USERMESSAGE,0,(LPARAM)&str);

  return 0;

  }

  在這個函數中,我們要運行由此函數組成的一個線程的話,就需要傳遞一個參數lpParam,而這個參數是由 Param 的結構體來指定。實際上是傳遞了三個參數進去。

   代碼如下:

  Param* par;

  par = (Param*)lpParam;

  我們會用上在的強制類型轉換的方法,就可以還原參數的值。根據這三個參數就 自定主的線程函數就可以運行了。那如何通知界面線程呢。看一下自定義函數里面的這一句

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 齐河县| 苗栗市| 清河县| 海南省| 丹棱县| 宁津县| 福海县| 那曲县| 屏山县| 青海省| 金坛市| 弥勒县| 云霄县| 长乐市| 永泰县| 阿尔山市| 曲周县| 综艺| 文山县| 桃源县| 苏尼特右旗| 沙坪坝区| 福贡县| 枞阳县| 白朗县| 富阳市| 资阳市| 社会| 沧州市| 乾安县| 饶阳县| 定兴县| 中卫市| 开封市| 郸城县| 平潭县| 荔波县| 临猗县| 霍林郭勒市| 四会市| 阿勒泰市|