windows 1对1 消息队列 c++
时间: 2024-05-13 20:15:45 浏览: 90
C++ 跨平台 异步消息队列
5星 · 资源好评率100%
如果你想在Windows上使用C++实现1对1消息队列,可以使用Windows API中的邮件槽(Mailslot)。邮件槽是一种机制,用于在同一台计算机上的进程之间传递消息。以下是一个简单的示例:
```c++
#include <windows.h>
#include <iostream>
int main()
{
HANDLE hMailslot = CreateMailslot(TEXT("\\\\.\\mailslot\\test_mailslot"), 0, MAILSLOT_WAIT_FOREVER, nullptr);
if (hMailslot == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to create mailslot\n";
return 1;
}
std::cout << "Waiting for message...\n";
char message[1024];
DWORD bytesRead;
BOOL success = ReadFile(hMailslot, message, sizeof(message), &bytesRead, nullptr);
if (success) {
message[bytesRead] = '\0';
std::cout << "Received message: " << message << "\n";
} else {
std::cerr << "Failed to read message\n";
}
CloseHandle(hMailslot);
return 0;
}
```
在此示例中,我们使用CreateMailslot函数创建一个邮件槽,并指定邮件槽的名称为“test_mailslot”。然后,我们使用ReadFile函数从邮件槽中读取消息,并将其输出到控制台。
要向此邮件槽发送消息,可以使用以下代码:
```c++
#include <windows.h>
#include <iostream>
int main()
{
HANDLE hMailslot = CreateFile(TEXT("\\\\.\\mailslot\\test_mailslot"), GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr);
if (hMailslot == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to open mailslot\n";
return 1;
}
const char* message = "Hello, world!";
DWORD bytesWritten;
BOOL success = WriteFile(hMailslot, message, strlen(message), &bytesWritten, nullptr);
if (success) {
std::cout << "Message sent\n";
} else {
std::cerr << "Failed to send message\n";
}
CloseHandle(hMailslot);
return 0;
}
```
在此示例中,我们使用CreateFile函数打开邮件槽,并使用WriteFile函数向其发送消息。
请注意,在此示例中,我们使用的是同步读写操作。如果你需要异步操作,可以使用ReadFileEx和WriteFileEx函数。另外,如果你需要在计算机之间传递消息,可以考虑使用套接字(Socket)或命名管道(Named Pipe)等其他机制。
阅读全文