1. 程式人生 > >MFC Dialog工程中多執行緒使用PostMessage傳送接收字串訊息並更新介面

MFC Dialog工程中多執行緒使用PostMessage傳送接收字串訊息並更新介面

在資源視圖裡的介面拖動一個Edit控制元件到介面上

右鍵Edit控制元件->屬性->General->ID->修改為 IDC_EDIT_SHOW_MSG


在介面上新增一個按鈕  

右鍵Push Button控制元件->屬性->General->ID->修改為 IDC_BUTTON_SEND_MSG


1.自定義訊息ID

在 XXXDlg.h 中的

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WM_MY_MESSAGE (WM_USER+100) 

       

/////////////////////////////////////////////////////////////////////////////
// CTestPostMessage_3Dlg dialog
class CTestPostMessage_3Dlg : public CDialog

{

//** 

}

加入上面紅色的一行程式碼

WM_USER為windows系統為非系統訊息保留的ID,這裡至少要用100,因為其它控制元件的訊息會佔用一部分。

2. 定義訊息處理函式。

在 XXXDlg.h 中的  類裡面定義的

// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CTestPostMessage_3Dlg)

//在此處加入

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

//}}AFX_MSG
DECLARE_MESSAGE_MAP()

訊息處理函式為訊息目標類的成員函式。首先應該在.h 檔案中宣告。

3.在CMainDialog.cpp中實現訊息處理函式

LRESULT   你的類名::OnMyMessage(WPARAM wParam, LPARAM lParam)


// TODO: 處理使用者自定義訊息 
//... 
CString *str=(CString*)wParam;
CEdit* edit1=(CEdit*)GetDlgItem(IDC_EDIT_SHOW_MSG);
 edit1->SetWindowText(*str);
 delete str;
return 0; 
}


其中IDC_EDIT_SHOW_MSG 為在介面上新建的 Edit 文字框的ID

4.在XXX_Dlg.cpp中對映訊息ID和訊息處理函式

加入如下紅色一行  CTestPostMessage_3Dlg 為工程名,根據自己建立的工程名不同而不同

BEGIN_MESSAGE_MAP(CTestPostMessage_3Dlg, CDialog)
//{{AFX_MSG_MAP(CTestPostMessage_3Dlg)
ON_WM_SYSCOMMAND()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) 
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_SEND_MSG, OnButtonSendMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

在剛才的Button新增響應事件,寫入如下程式碼

void CTestPostMessage_3Dlg::OnButtonSendMsg() 
{
CString *p_str=new CString("Hello EveryBody");
CWnd *pWnd=CWnd::FindWindow(NULL,"testPostMessage_3");//獲取目的視窗物件
         ::SendMessage(*pWnd,WM_MY_MESSAGE,(WPARAM)(p_str), 0);
}

在建立執行緒的時候將主視窗控制代碼作為引數傳入執行緒,就可以用 PostMessage傳遞訊息了

相關推薦

MFC Dialog工程執行使用PostMessage傳送接收字串訊息更新介面

在資源視圖裡的介面拖動一個Edit控制元件到介面上 右鍵Edit控制元件->屬性->General->ID->修改為 IDC_EDIT_SHOW_MSG 在介面上新增一個按鈕   右鍵Push Button控制元件->

MFC執行的使用

在標準的MFC中使用的執行緒API是“AfxBeginThread“。下面是我對多執行緒的一個操作。因為查了好多資料後,將他們的內容進行整合。我覺得網上並沒有給出一個特別清晰的思路。思路:1:建立執行緒;2:建立執行緒呼叫的函式;3:結束執行緒第一步:建立執行緒CWinThr

執行執行設定超時退出監控

前言 在寫多執行緒程式時,大多數情況下會先excutor建立執行緒池,然後再建立執行緒,但是對一些讀資料庫或者其他IO操作,容易堵住執行緒,此時就需要給執行緒設定超時時間,幹掉超時的執行緒再重新拉起一個執行緒來,但是java執行緒建立並沒有預留超時引數,研究了一下網上也沒找到

觀察者模式執行執行訂閱事件順序執行的問題

       對事件釋出訂閱模式中啟動執行緒執行操作,但又要保證執行緒順序執行的一些思考和實踐,在開發過程中,經常會遇到需要使用事件來觸發方法執行的情況,比如CS中按鈕的點選事件,滑鼠移動事件,鍵盤監聽事件等等,有時候需要執行比較耗時的任務,但並不希望阻塞主執

Spring4.x執行使用

直接上程式碼: 一:配置類 import java.util.concurrent.Executor; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springfram

java執行一定快嗎?看完就知道!!!

理解上下文切換   即使是單核處理器也支援多執行緒執行程式碼,CPU通過每個執行緒分配CPU時間片來實現這個機制.時間片是CPU分配給多個執行緒的時間,因為時間片非常短,所以CPU通過不停的切換執行緒執行,讓我們感覺多個執行緒是同時執行的,時間片一般是幾十毫秒(ms).  

Python執行總結

Python中的多執行緒 多執行緒 一個程序中有多個執行緒就是多執行緒。 一個程序中至少有一個執行緒,並作為程式的入口,這個就是主執行緒。一個程序至少有一個主程序,其他執行緒稱為工作執行緒。 執行緒安全:執行緒執行一段程式碼,不會產生不確定的結果,那這段程式碼就是執行緒安全。(例如pr

python(2.7)執行使用舉例

python(2.7)中多執行緒使用舉例 python27中多執行緒使用舉例 下邊的程式碼都不難理解,不做多餘解釋。唯一有困惑的地方已經在原始碼中註釋說明。這裡也不做多執行緒編碼知識的講解。把這幾種形式(主要是第三種)練成muscle mem

python執行event的使用-----------------即一個靈活的方法標誌位,類似於java的等待喚醒機制(python與java不同的地方)

event是python中一個特有的標誌位方法,他一共有三種方法 1.event.wait():如果標誌位設定了,它不做任何事,如果沒有設定,則將會鎖住,等待標誌位的設定 2.event.set():設定標誌位 3.event.clear():清除標誌位 這一種機制很

python執行開啟的兩種方式(內含有event的應用,即安全的機制,類似於java的等待喚醒機制,不會出現執行之間的錯亂問題)

 event是類似於java中的等待喚醒機制,具體方法參照上一篇CSDN 下面來介紹開啟執行緒的第一種方式 #Filename:threading1.py #開啟執行緒的第一種方式 import threading import time event=threadin

MFC,STL,執行,網路通訊,linux,泛型,IO

1 C++介面庫 2 MFC入門教程 3    C++筆記——第一個MFC程式 4 STL運用的C++技術——後記 5 C++ STL庫使用注意點 6 C++ STL 一般總結 7 C++中STL用法總結 8 c++ STL 9

Android執行通訊:Handler的理解

Android中的Handler Android中Handler在我理解主要是為了解決執行緒間通訊。 使用Android的Handler機制主要要了解幾個類: Looper: 一個執行緒對應一個或者0個Looper,主執行緒在ActivityThread的時候會預設建立一個L

以單例模式為例,在Idea執行debug

我們以單例模式的懶漢式在idea中進行多執行緒debug 一是可以學習多執行緒debug,二是可以瞭解懶漢式的執行緒不安全的原因 首先我們建立一個單例懶漢式,然後建立兩個執行緒 程式碼如下:   然後 進行多執行緒debug,來干預懶漢式的執行順序

python執行程序的選擇問題

多執行緒與多程序的選擇問題 既然python中多執行緒和多程序都能夠進行非同步操作,那麼到底應該如何選擇 首先我們必須知道GIL全域性解釋鎖對執行緒的影響,其同一時間只能夠允許一個執行緒進入cpu進行執行,因此對於cpu密集型的程式並不適用於多執行緒操作 cpu密集型的功能對cp

Java執行併發體系知識點彙總

一、多執行緒 1、作業系統有兩個容易混淆的概念,程序和執行緒。 程序:一個計算機程式的執行例項,包含了需要執行的指令;有自己的獨立地址空間,包含程式內容和資料;不同程序的地址空間是互相隔離的;程序擁有各種資源和狀態資訊,包括開啟的檔案、子程序和訊號處理。 執行緒:表示程

linux下一個程序執行的資源共享

在說執行緒資源共享之前,我們先來說來說一下執行緒的概念,執行緒是程序內部的一條執行序列(即執行流),一個程序至少有一個執行緒,即main函式代表的執行流。當然我們也可以通過執行緒庫來建立新的執行緒,這種執行緒我們稱之為函式執行緒,同一個程序中的所有普執行緒是併發執行的。而這些

java執行的建立和啟動(1)

多執行緒概述 1.什麼是多執行緒 執行緒是程式執行的一條路徑,一個程序中可以包含多條執行緒;多執行緒併發執行可以提高程式的效率 2.程序和執行緒之間的關係 作業系統可以同時執行多個任務,每個任務就是程序;程序可以同時執行多個任務,每個任務就是執

Java進階(四十二)Java執行使用匿名內部類的方式進行建立3種方式

Java中多執行緒使用匿名內部類的方式進行建立3種方式 package cn.edu.ujn.demo; // 匿名內部類的格式: public class ThreadDemo {

C++執行的加鎖機制

問題來源於某面試題: 編寫一個單例模式的類。 #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; class singleStance{

for迴圈執行的無序性

在學習多執行緒的互斥與同步中遇到一個問題,如下:public class Test { static int i; public static void main(String[] args) { for(i=0; i<10; i++){ new Thread