#include #include #include #include #include #include #include #include #include /* 常量定义 */ #define MESSAGE_QUEUE_SIZE 10000 // 消息队列容量 /* 消息结构体 */ typedef struct { int client_index; // 客户端索引 char* data; // 消息数据 size_t length; // 消息长度 } deal_message_t; /* 线程安全的消息队列 */ class SafeMessageQueue { private: std::queue queue; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; std::atomic count{ 0 }; public: bool push(const deal_message_t& msg) { pthread_mutex_lock(&mutex); if (queue.size() >= MESSAGE_QUEUE_SIZE) { pthread_mutex_unlock(&mutex); return false; } queue.push(msg); count++; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); return true; } bool pop(deal_message_t& msg) { pthread_mutex_lock(&mutex); while (queue.empty()) { pthread_cond_wait(&cond, &mutex); } msg = queue.front(); queue.pop(); count--; pthread_mutex_unlock(&mutex); return true; } size_t size() const { return count.load(); } }; void process_received_message(int client_index, const char* data, size_t length);