使用c++实现 类似android的消息处理机制
时间: 2024-10-25 07:16:18 浏览: 5
在Android中,消息处理通常通过MessageQueue和Handler系统来实现,这是一种基于事件驱动的模型。在C++中,我们可以构建类似的概念,比如使用`std::queue`来存储待处理的消息,创建一个独立线程(如`std::thread`)来监听队列并执行相应的处理函数,以及一个`MessageHandler`类来封装消息发送和接收。
以下是一个简单的例子:
```cpp
#include <iostream>
#include <queue>
#include <thread>
// 消息基类
class Message {
public:
virtual void process() const = 0;
};
// 具体消息实现
class ConcreteMessage : public Message {
public:
void process() const override { std::cout << "Processing ConcreteMessage...\n"; }
};
// 消息处理器
class MessageHandler {
private:
std::queue<Message*> messages;
std::thread worker_thread;
public:
// 发送消息
void sendMessage(Message* msg) {
messages.push(msg);
}
// 启动消息处理线程
void start() {
worker_thread = std::thread([this] {
while (!messages.empty()) {
auto msg = messages.front();
if (msg != nullptr) {
msg->process();
messages.pop();
} else {
break; // 如果接收到空指针,表示消息循环结束
}
}
worker_thread.join(); // 等待主线程结束
});
}
~MessageHandler() {
// 可能需要添加停止处理逻辑,例如发送空指针到队列
// worker_thread.detach(); // 不等待线程结束,仅分离
}
};
int main() {
MessageHandler handler;
ConcreteMessage cm;
handler.sendMessage(&cm); // 发送消息
handler.start(); // 启动消息处理
return 0;
}
```
在这个示例中,`MessageHandler`负责管理消息队列,并启动一个线程去处理队列中的消息。`ConcreteMessage`作为具体的子类实现了`process()`方法,当消息被消费时,会执行这个方法。
阅读全文