在C++中實現actor之間的通信通常使用消息傳遞的方式。可以使用消息隊列、異步消息傳遞、共享內存等方式來實現。以下是一個簡單的示例代碼:
#include <iostream>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>
class Actor {
public:
Actor() : running(true) {
thread = std::thread([this]() {
while (running) {
std::unique_lock<std::mutex> lock(mutex);
if (messages.empty()) {
cv.wait(lock);
} else {
auto message = messages.front();
messages.pop();
lock.unlock();
processMessage(message);
}
}
});
}
void sendMessage(const std::string& message) {
std::lock_guard<std::mutex> lock(mutex);
messages.push(message);
cv.notify_one();
}
void stop() {
running = false;
cv.notify_one();
thread.join();
}
protected:
virtual void processMessage(const std::string& message) {
std::cout << "Actor received message: " << message << std::endl;
}
private:
std::queue<std::string> messages;
std::mutex mutex;
std::condition_variable cv;
std::thread thread;
bool running;
};
int main() {
Actor actor1;
Actor actor2;
actor1.sendMessage("Hello from actor1");
actor2.sendMessage("Hello from actor2");
std::this_thread::sleep_for(std::chrono::seconds(1));
actor1.stop();
actor2.stop();
return 0;
}
在上面的示例中,定義了一個簡單的Actor類,其中包含一個消息隊列用于存儲消息,以及一個線程用于處理消息。可以通過sendMessage方法向Actor發送消息,然后Actor會在自己的線程中處理消息。在main函數中創建了兩個Actor實例,并發送了兩條消息。通過調用stop方法可以停止Actor的線程。
這只是一個簡單的示例,實際應用中可能需要更復雜的消息傳遞機制來實現actor之間的通信。可以根據具體需求選擇合適的通信方式,比如使用消息隊列、共享內存、網絡通信等。