我有一个简单的Application,它通过TCP Socket接收消息并处理相同的消息和Perform Some Actions。
我已经使用std :: queue'来存储消息并在线程上处理它们。
应用程序运行正常,没有崩溃。但是,几分钟后应用程序消耗大量的CPU。
这是我的插入消息和进程消息(线程)代码
我的简单队列和线程变量
std::queue<std::string> in_data_queue;
pthread_mutex_t in_data_queue_lock=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t in_data_queue_condition=PTHREAD_COND_INITIALIZER;
处理队列代码
void *processMessage(void *attr) {
while (true) {
try {
if (pthread_mutex_trylock(&in_data_queue_lock) == 0) {
if (!in_data_queue.empty()) {
std::string data = in_data_queue.front();
in_data_queue.pop();
pthread_cond_signal(&in_data_queue_condition);
pthread_mutex_unlock(&in_data_queue_lock);
// do some action ;
} else {
pthread_cond_wait(&in_data_queue_condition,
&in_data_queue_lock);
pthread_mutex_unlock(&in_data_queue_lock);
}
}
} catch (std::exception &e) {
cout << e.what() << endl;
}
cout << "processMessage" << endl;
}
pthread_exit(NULL);
}
用于在队列中插入消息的代码
void pushMessage(std::string rData) {
pthread_mutex_lock(&in_data_queue_lock);
in_data_queue.push(rData);
pthread_cond_signal(&in_data_queue_condition);
pthread_mutex_unlock(&in_data_queue_lock);
}
任何身体帮助我解决线程的错误。这是一个很好的实现或在这个线程上的任何问题。请帮帮我..