Winddows 訊息佇列原理和程式設計例項
原文連結:http://www.vckbase.com/index.php/wv/1593
在Cstore中,客戶端程式中各執行緒間的通訊機制採用的是windows訊息佇列。
本文主要包括以下內容:
1、簡單理解Windows的訊息
2、通過一個簡單的Win32程式理解Windows訊息
3、通過幾個Win32程式例項進一步深入理解Windows訊息
4、佇列訊息和非佇列訊息
5、WM_COMMAND和WM_NOTIFY
6、MFC的訊息對映
7、訊息反射機制
1、簡單理解Windows的訊息
訊息,就是指Windows發出的一個通知,告訴應用程式某個事情發生了。
舉個例子來說,滑鼠單擊某應用程式的一個按鈕。這時,Windows(作業系統)給應用程式傳送這個訊息,通知應用程式該按鈕被點選,應用程式將進行相應反應。
訊息一般用一個32位的數來標識,這個數唯一地標識這個訊息。這些訊息的識別符號一般在標頭檔案winuser.h 中定義,如:
1.
#define
WM_PAINT 0x000F
2.
#define
WM_QUIT 0x0012
其實訊息本身是一個MSG結構。MSG結構定義如下:
1.
typedef
struct
tagMSG
{
2.
HWND
hwnd;
//接受訊息的視窗控制代碼
3.
UINT
message;
//訊息識別符號
4.
WPARAM
wParam;
//32位附加資訊
5.
LPARAM
lParam;
//32位附加資訊
6.
DWORD
time
;
//訊息建立的時間
7.
POINT
pt;
//訊息建立時滑鼠在螢幕座標系中的位置
8.
}
MSG;
也就是說,對於任何一個訊息,都有一個MSG變數與之對應,該變數包含了訊息的相關資訊。而我們在一般情況下,只使用訊息的訊息識別符號,該識別符號也唯一地代表了這個訊息。
舉個例子來說,當我們收到一個字元訊息的時候,message成員變數的值就是WM_CHAR,但使用者到底輸入的是什麼字元,那麼就由wParam和lParam來說明。wParam、lParam表示的資訊隨訊息的不同而不同。
Windows作業系統已經給我們定義了大量的訊息,這些訊息我們稱為系統訊息。除了系統訊息,我們還可以自己定義訊息,即自定義訊息。
值小於0x0400的訊息都是系統訊息,自定義訊息一般都大於0x0400。
系統訊息取值一般有如下規律,如表1:
範圍 | 意義 |
0x0001――0x0087 | 主要是視窗訊息 |
0x00A0――0x00A9 | 非客戶區訊息 |
0x0100――0x0108 | 鍵盤訊息 |
0x0111――0x0126 | 選單訊息 |
0x0132――0x0138 | 顏色控制訊息 |
0x0200――0x020A | 滑鼠訊息 |
0x0211――0x0213 | 選單迴圈訊息 |
0x0220――0x0230 | 多文件訊息 |
0x03E0――0x03E8 | DDE訊息 |
0x0400 | WM_USER |
0x0400――0x7FFF | 自定義訊息 |
表1
在WINUSER.H中,我們有定義:
1.
#define
WM_USER 0x0400
對於自定義訊息,我們一般採用WM_USER 加一個整數值的方法定義自定義訊息,如:
1.
#define
WM_RECVDATA WM_USER + 1
如果您初次接觸Windows程式設計,或是初次接觸Windows訊息,對於上述解釋可能沒有看懂,這也不要著急,後面的例項將會逐步帶您對Windows的訊息程式設計有一個瞭解。
2、通過一個簡單的Win32程式理解Windows訊息
例程1:一個簡單的Win32程式程式碼(見附帶原始碼 工程M1)
開啟VC++ 6.0,新建一個Win32 Application,工程名為M1,在該工程新增C++ Source File,檔名為M1,在該檔案中新增如下程式碼:
01.
//一個簡單的Win32應用程式
02.
03.
//通過這個簡單的例項講解Windows訊息是如何傳遞的
04.
05.
#include
06.
07.
//宣告視窗過程函式
08.
09.
LRESULT
CALLBACK
WndProc(
HWND
相關推薦
Winddows 訊息佇列原理和程式設計例項
原文連結:http://www.vckbase.com/index.php/wv/1593
在Cstore中,客戶端程式中各執行緒間的通訊機制採用的是windows訊息佇列。
本文主要包括以下內容:
1、簡單理解Windows的訊息
2、通過一個簡單的Win3
java呼叫rabbitmq訊息佇列傳送和接收訊息例項
消費者Consumer.java程式碼
package com.rabbitMQ.pro;
import com.rabbitmq.client.ConnectionFactory;
impor
隱馬爾科夫鏈(hmm)基本原理和簡單例項
title: 隱馬爾科夫鏈(hmm) tags: hmm,隱馬爾科夫鏈,基本原理 grammar_cjkRuby: true
隱馬爾科夫鏈基本介紹
隱馬爾科夫(Hidden Markov Model,HMM),瞭解一個演算法要做到:會其意,知其形。
引子
隱馬爾科夫
Linux訊息佇列與執行緒例項理解
相較於程序,執行緒不僅擁有程序的併發性,相互獨立等特點,更有佔用資源較少,效率高等特點。
建立執行緒
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)
訊息佇列概念和使用場景 及ActiveMQ詳細入門使用教程
一、訊息佇列
訊息即是資訊的載體。為了讓訊息傳送者和訊息接收者都能夠明白訊息所承載的資訊(訊息傳送者需要知道如何構造訊息;訊息接收者需要知道如何解析訊息),它們就需要按照一種統一的格式描述訊息,這種統一的格式稱之為訊息協議。所以,有效的訊息一定具有某一種格式;而
訊息佇列原理總結
訊息佇列應用的場景
業務解耦:訊息佇列要解決的最本質問題,實現設計的單一性原則,不耦合其他模組的業務。
最終一致性:用來處理延遲不那麼敏感的“分散式事務”場景或者不重要的業務。
廣播:下游有很多系統
Java常用訊息佇列原理介紹及效能對比
訊息佇列使用場景
為什麼會需要訊息佇列(MQ)?
解耦
在專案啟動之初來預測將來專案會碰到什麼需求,是極其困難的。訊息系統在處理過程中間插入了一個隱含的、基於資料的介面層,兩邊的處理過程都要實現這一介面。這允許你獨立的擴充套件或修改兩邊的處理
RabbitMQ訊息佇列生產者和消費者
概述
生產者生產資料至 RabbitMQ 佇列,消費者消費 RabbitMQ 佇列裡的資料。
詳細
一、準備工作
1、安裝 RabbitMQ 服務和 RabbitMQ Management。
2、在 RabbitMQ 管理介面建立使用者 test
MQ入門總結(一)訊息佇列概念和使用場景
一、訊息佇列
訊息即是資訊的載體。為了讓訊息傳送者和訊息接收者都能夠明白訊息所承載的資訊(訊息傳送者需要知道如何構造訊息;訊息接收者需要知道如何解析訊息),它們就需要按照一種統一的格式描述訊息,這種統一的格式稱之為訊息協議。所以,有效的訊息一定具有某一種格式;而
Java中mqtt訊息佇列傳送和訂閱訊息
1.首先搭建mqtt協議伺服器
2.上程式碼,下面是傳送和訂閱mqtt程式碼demo
package io.test;
import java.util.Date;
import org.eclipse.paho.client.mqttv3.IMqttDelivery
linux中訊息佇列kfifo和訊號量sem_t的用法
使用kfifo和sem_t配合來實現訊息佇列:由sem來管理目前可以傳送和接收的總的訊息數,由kfifo來儲存訊息。具體實現起來就是定義訊號量sem_t_send和sem_t_recv,sem_t_send設為max_num,sem_t_recv設為0。
android手機裸眼3D技術原理和程式設計實現
1.裸眼3D手機從去年開始流行。做為一個賣點或者噱頭,為手機的輸入輸出提供一抹靈動的色彩。裸眼3D可以在二維的手機螢幕上不需要配戴VR眼鏡或者谷歌紙盒就能展示三維的世界的效果,一般來說要給使用者提供好的體驗,需要軟體硬體相結合實現。硬體一般需要支援裸眼3D的手機或者普通的手機
rabbitmq訊息佇列原理
一、rabbitmq架構
RabbitMQ是一個流行的開源訊息佇列系統,是AMQP(高階訊息佇列協議)標準的實現,由以高效能、健壯、可伸縮性出名的Erlang語言開發,並繼承了這些優點。rabbitmq簡單架構如下:
上圖簡單展示了rabbitmq的架構
MPI 概念、原理和程式設計
Communication functions that involves all the process in a communicator are called collective communications. To distinguish betwee
訊息佇列原理及activeMQ基本知識點
activeMQ
1)廣義訊息佇列
a)訊息佇列本質:一次rpc變三次;內容儲存;合適的時間投遞
b)訊息佇列設計重點rpc通訊: 協議(http,tcp),序列化(二進位制流)儲存: 檔案/資料庫/記憶體消費關係處理: 訊息生產者,訊息消費者,訂閱關係事務/防丟防重/批量
Kafka訊息佇列原理總結
最近在測試kafka的讀寫效能,所以借這個機會了解了kafka的一些設計原理,既然作為分散式系統,我們還是按照分散式的套路進行分析。
Kafka的邏輯資料模型:
生產者傳送資料給服務端時,構造的是ProducerRecord<Integer, String>(
訊息佇列MQ技術的介紹和原理
訊息佇列技術是分散式應用間交換資訊的一種技術。訊息佇列可駐留在記憶體或磁碟上,佇列儲存訊息直到它們被應用程式讀走。通過訊息佇列,應用程式可獨立地執行--它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程式接收此訊息。
訊息中介軟體概述
訊息佇列技術是分散式
多程序程式設計之程序間通訊-管道和訊息佇列
1.程序間通訊
Linux作為一種新興的作業系統,幾乎支援所有的Unix下常用的程序間通訊方法:管道、訊息佇列、共享記憶體、訊號量、套介面等等。
2.管道
管道是程序間通訊中最古老的方式,它包括無名管道(或者匿名管道)和有名管道兩種,前者用於父程序和
Linux:使用多執行緒程式設計和訊息佇列,實現兩個程序之間的聊天
思路:
一個檔案:建立一個執行緒和主函式,或者建立兩個執行緒主函式呼叫(我用這種)。
建立兩個訊息佇列,
一共兩個檔案,兩個佇列,四個程序
a.c 一個程序寫(訊息型別為1) ---->>佇列 一個程序讀(訊息型別為2)
b.c 一
linux網路程式設計之POSIX 訊息佇列 和 系列函式
#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include<sys/msg.h>#include<sys/types.h>#include<unistd.h>#includ