您現在的位置是:電腦技術吧?>? 基礎知識 ??>??java多線程編程注意事項,多線程注意事項??>??正文詳情

java多線程編程注意事項,多線程注意事項

慈飛英2019-12-19 12:42:59 人圍觀
簡介java多線程編程培訓機構本文主要介紹了C 中MFC多線程編程注意事項的相關信息。您可以參考多線程編程中最簡單的方法,即使用afxbeginthread創建工作線程。看看這個函數的描述c多線程編

這篇文章主要介紹了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;  我們會用上在的強制類型轉換的方法,就可以還原參數的值。

根據這三個參數就 自定主的線程函數就可以運行了。

那如何通知界面線程呢。

看一下自定義函數里面的這一句  hander-SendMessage(WM_USERMESSAGE,0,(LPARAM)str);  這一句中 hander 是由結構體轉換而來的 接收消息的控件的句柄。

然后調用這個控件的 SendMessage 方法,就可以向此控件發消息了。

消息的內容由后面的參數來決定  第一個參數 WM_USERMESSAGE 這是一個消息的名稱。

這個名稱實際上是一個數字。

我們需要在 .h 文件中 指定一下如下面的格式  #define WM_USERMESSAGE 11130  后面的數字造的大一點,哈哈  第二個與第三個參數,就是這個消息傳遞具體的值,如果不需要傳遞值的話,那就直接寫0吧  在這里我們想在傳遞參數的第三個參數上傳遞一個 字符串,那就是上面的寫法了。

  這樣的話,在線程中發送消息的部分,就全部講完了。

消息發送出去了,怎么接收呢?  這真是一個重要的問題  首先,要將消息做一下映射。

消息映射的目的,就是告訴程序,當出現這個消息的時候,使用哪個函數進行處理。

這樣的話,就首先需要一個消息映射的函數。

這個消息映射的函數不是亂寫,因為要傳遞兩個參數,所以這個函數需要能夠接收這兩個參數。

處理函數一般這樣子寫  LRESULT CCopyfileDlg::OnProcName(WPARAM wParam, LPARAM lParam)  他奶奶的,太神奇了。

返回值只能是 LRESULT 。

這個不用討論吧,照著抄吧。

函數名稱后面有參數兩個,這是一個實例函數。

因為前面有::  兩個參數一般也寫成這個樣子的。

  函數內容,就由你的程序的功能決定了。

我這里直接抄一段我自己的代碼吧  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 LRESULT CCopyfileDlg::OnProcName(WPARAM wParam, LPARAM lParam) { // TODO: 處理用戶自定義消息 CString* str = (CString*)lParam; SetDlgItemText(IDC_STATIC,*str); if(*str == 復制完成) { (CButton*)GetDlgItem(IDC_COPYBUT)-EnableWindow(true); } return 0; }   這段程序是根據得到的傳遞過來的參數,在界面上顯示具體的參數內容。

  SetDlgItemText(IDC_STATIC,*str); //在靜態文本框中顯示消息。

  備注:  如果要讓按鈕變成灰色的,那就使用控件的 EnableWindow 方法。

  這個方法,我們說,是專門的消息處理函數,那么它的聲明也比較特殊。

需要這么寫  afx_msg LRESULT OnProcName(WPARAM wParam, LPARAM lParam);  將上面的內容放在 h文件的合理位置就可以了。

  現在消息處理函數也有了。

但是怎么將映射呢?  其實在 CPP文件中,有一個由 BEGIN_MESSAGE_MAP(CCopyfileDlg, CDialog) 和END_MESSAGE_MAP() 包括的區域。

這個區域就是用來定義消息映射的。

  將這么一句話放在他們中間,就OK了  ON_MESSAGE(WM_USERMESSAGE,OnProcName)  這么一句話,就將 WM_USERMESSAGE 與 OnProcName 與消息處理函數結合在一起了。

是不是超級簡單呀!  這樣我們的界面線程中的消息處理部分也主做好了。

  當消息發送過來后,就會通過消息映射放在對應的函數中加以處理。

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

版權聲明:本文由 慈飛英 整理編輯。

原標題:多線程編程需要注意什么,多線程編程注意問題

轉載注明出處:http://www.dn9ww09s.icu/basics/15556.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 編輯啟動選項,電腦高級啟動選項

    編輯啟動選項,電腦高級啟動選項 相關圖片win10進入高級啟動模式大多數服務器管理員知道MySQL數據庫管理系統(RDBMS)是一個高度靈活的軟件塊,具有廣泛的啟動選項,可以用來修改相關的行為。然而,大多數人并不知道標準的...

  • android添加菜單,菜單選擇切換android

    android添加菜單,菜單選擇切換android 相關圖片androidmenu菜單樣式本文介紹了Android的三個菜單。與您分享以供參考。具體分析如下:Android的菜單分為三種類型:選項菜單、上下文菜單和子菜單。一。選項菜單應用程序安卓上滑菜單...

  • 有特點的自我介紹,自我介紹特點

    有特點的自我介紹,自我介紹特點 相關圖片自我介紹優點不能在宏條件列中使用SQL表達式。一般來說,直接運行宏只是一個測試。在確保宏設計正確后,可以將宏附加到窗體、報表或控件以響應事件,或創建自定義菜單命令以運...

  • 機票查詢,數據庫查詢方法有哪些

    機票查詢,數據庫查詢方法有哪些 相關圖片如何提高數據庫查詢速度一。where子句中的連接順序:Oracle使用自下而上的順序來解析where子句。根據這一原理,表之間的連接必須在其他條件之前寫入,并且能夠過濾出最大記錄數的數...

  • ios信號量,iOS socket

    ios信號量,iOS socket 相關圖片基于信號量同步的雙緩沖區為了解決這個問題,我提出了兩個解決方案:第一個是在執行操作之前確定操作是否已經初始化。如果尚未初始化,則使用數組隊列存儲操作參數和調用的方...

  • hello the world,helloworld是什么

    hello the world,helloworld是什么 相關圖片hello world是什么意思本文主要介紹react JS的HelloWorld編程及其相關知識。React是一個由Facebook開發的開源JS框架。它的受歡迎程度目前正在飆升。您可以參考hello world是什么意...

  • 用戶IP地址,IP地址范圍

    用戶IP地址,IP地址范圍 相關圖片IP地址的分類在asp.net環境中獲取用戶IP的公共類。在許多情況下,我們需要記錄訪問者的IP地址。此類可以使用system.web.httpcontext.currentIP地址格式...

  • 自定義標簽在哪,自定義標簽是什么意思

    自定義標簽在哪,自定義標簽是什么意思 相關圖片自定義個性標簽大全一般來說,要開發JSP自定義標記,我們需要參考以下兩個包:import javax。Servlet。JSP。標簽文本。*. 首先,我們需要對開發自定義標記所涉及qq自定義標簽高冷...

  • 安全隱患措施有哪些,身邊的安全隱患及措施

    安全隱患措施有哪些,身邊的安全隱患及措施 相關圖片避免安全隱患隨著Internet的發展,web技術日新月異。ASP(active server pages)作為繼通用網關接口(CGI)之后的一種典型的服務器端Web設計技我身邊的安全隱患及改正措施...

  • 安裝軟件說端口號被占用解決方法,解決端口占用

    安裝軟件說端口號被占用解決方法,解決端口占用 相關圖片8080端口號被占用本文主要介紹Android開發中端口號占用問題的解決方案。本文給出了一種簡單實用的方法來解決這個煩人的問題。你可以參考Android開發中的端口號占用問題,這個查看8...

熱評文章

  • php比較大小,php三個數比較大小

    php比較大小,php三個數比較大小 相關圖片php數組值比較大小本文給出了一個例子來說明PHP如何計算整個目錄的大小。與您分享以供參考。具體實現方法如下:?1234567891012131415161718192021222php字體大小...

  • 蓋格計數器,蓋革計數器原理

    蓋格計數器,蓋革計數器原理 相關圖片手持計數器下面介紹如何用數據庫實現簡單計數器。另存為計數。ASP<%set conn=服務器。創建對象(ADODB。連接)conn.open driver={Micros程序計數器...

  • eth0基本配置,電腦基本配置有哪些

    eth0基本配置,電腦基本配置有哪些 相關圖片主機基本配置一。為結構應用程序配置web.xml文件步驟1:配置ActionServletServletServletnameAction/ServletnameServl汽車基本配置...

  • 什么是開源項目,如何加入開源項目

    什么是開源項目,如何加入開源項目 相關圖片go 開源項目一。在許多IOS開源項目中,afnetworking是最受開發人員歡迎的庫項目。Afnetworking是一個輕量級的IOS和Mac OSX網絡通信類庫。現在它php開源項目...

  • 安卓彈出消息框,如何設置手機qq不彈出

    安卓彈出消息框,如何設置手機qq不彈出 相關圖片怎么讓qq不彈出消息框我想這個問題經常被問到。實際上,這不是一個難題。我自己整理了索引,方便新手參考。在ASP彈出消息對話框中,確認對話框引用。彈出消息框的最簡單方法是在...

  • 查找數組元素的位置,數組查找某個元素

    查找數組元素的位置,數組查找某個元素 相關圖片在順序表中查找元素本文主要介紹了在JavaScript中添加、查找和刪除元素的方法,該方法簡單實用。如果需要的話你可以參考一下。代碼很簡單,這里沒有太多的廢話。?12345678selenium定位...

  • 打開Windows命令行,windows10命令行

    打開Windows命令行,windows10命令行 相關圖片windows常用命令行命令要從命令行啟動mysqld服務器,應啟動控制臺窗口(或DOS窗口),并輸入命令:C:C:program filesmysqlmysqlsqlsqlserver5windows命令行工具...

  • 和包怎么用,android獲取包名

    和包怎么用,android獲取包名 相關圖片和包券怎么激活Oracle獲取包所依賴的所有對象,包括其子對象。它使用一個臨時表來記錄被遍歷的節點,并使用層數來記錄被遍歷的包。總的來說,它可以改變很多。Declare—獲取和包券...

  • 檢索項目是什么意思,多媒體檢索 項目

    檢索項目是什么意思,多媒體檢索 項目 相關圖片大規模檢索為了提高在微軟Access項目中使用表單或數據表中的數據時的性能,可以設置從SQLServer數據庫下載的最大記錄數。一。在導航模式下打開數據表或窗體。2。請執檢索啥意思...

  • detain和retain,retain和sustain

    detain和retain,retain和sustain 相關圖片certain原子和非原子用于確定編譯器生成的getter和setter是否是原子操作。當atomic設置成員變量的@property屬性時,它默認為atomic,提供多線程retain用法...

關注微信

变脸官网查询