window c++ 多进程之间如何通过消息队列传递消息案例
时间: 2024-01-27 11:03:30 浏览: 29
以下是一个简单的 Windows C++ 多进程间通过消息队列传递消息的案例:
1. 定义消息类型
首先需要定义消息类型,包括消息ID和消息内容。例如:
```cpp
#define WM_USER_MESSAGE (WM_USER + 1)
struct UserMessage {
int messageId;
char messageText[256];
};
```
2. 创建消息队列
在发送和接收消息之前,需要先创建一个消息队列。使用 `CreateMessageQueue` 函数来创建一个本地的消息队列。
```cpp
HANDLE hQueue = CreateMessageQueue("MyMessageQueue");
if (hQueue == NULL) {
// 处理错误
}
```
3. 发送消息
使用 `SendMessage` 函数来发送消息。以下代码演示了如何发送一条消息:
```cpp
UserMessage message;
message.messageId = 1;
strcpy_s(message.messageText, "Hello World");
SendMessage(hQueue, WM_USER_MESSAGE, (WPARAM)&message, sizeof(message));
```
4. 接收消息
使用 `GetMessage` 函数来接收消息。以下代码演示了如何接收一条消息:
```cpp
UserMessage message;
DWORD size;
DWORD flags;
BOOL result;
result = GetMessage(hQueue, &message, &size, &flags, INFINITE);
if (result == FALSE) {
// 处理错误
return -1;
}
// 处理接收到的消息
if (message.messageId == 1) {
printf("Received message: %s\n", message.messageText);
}
```
5. 关闭消息队列
使用 `CloseMessageQueue` 函数来关闭消息队列。
```cpp
CloseMessageQueue(hQueue);
```
完整的代码示例:
```cpp
#include <Windows.h>
#include <stdio.h>
#define WM_USER_MESSAGE (WM_USER + 1)
struct UserMessage {
int messageId;
char messageText[256];
};
int main() {
HANDLE hQueue = CreateMessageQueue("MyMessageQueue");
if (hQueue == NULL) {
printf("Failed to create message queue.\n");
return -1;
}
// 发送消息
UserMessage message;
message.messageId = 1;
strcpy_s(message.messageText, "Hello World");
SendMessage(hQueue, WM_USER_MESSAGE, (WPARAM)&message, sizeof(message));
// 接收消息
UserMessage receivedMessage;
DWORD size;
DWORD flags;
BOOL result;
result = GetMessage(hQueue, &receivedMessage, &size, &flags, INFINITE);
if (result == FALSE) {
printf("Failed to receive message.\n");
CloseMessageQueue(hQueue);
return -1;
}
if (receivedMessage.messageId == 1) {
printf("Received message: %s\n", receivedMessage.messageText);
}
CloseMessageQueue(hQueue);
return 0;
}
```