我在使用 QLocalServer/QLocalSocket 时遇到了一些问题。
我正在将原始像素数据从服务器发送到客户端,并且在处理过程中存在巨大的内存泄漏。但我不知道是什么原因...
内存增加约 20MB/1 秒(当我在系统管理员那里检查时。)
以下是我的代码。
服务器
void qsharedServer::updateImageData(unsigned char* r_data, int r_width, int r_height, int r_step, int r_label_i){
QLocalSocket* connection = 0;
connection = clientSocket;
if (connection)
{
if (connection->isOpen())
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_7);
const char* rc_data = reinterpret_cast<const char*>(r_data);
out <<r_step*r_height<< r_width << r_height << r_step;
out.writeBytes(rc_data, r_step*r_height);
connection->write(block);
connection->flush();
}
}
客户
void qsharedClient::readSocket(){
QByteArray block = connection->readAll();
QDataStream in(&block, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_5_7);
/* Read Raw Data */
char* data;
uint size;
int width;
int height;
int step;
while (!in.atEnd())
{
in >> size >> width >> height >> step;
in.readBytes(data, size);
}
emit drawData((unsigned char*)data, width, height, step);
}
这两个代码可以很好地交流,但记忆会急剧增加,当超过一定水平时就会终止。
我试过像connection->reset() 或 QByteArray::clear()..etc但它不起作用。
我的问题有什么想法吗?
使用QTcpServer/QTcpSocket怎么样?这可以解决我的问题??
请分享你的想法。谢谢!!