2016-12-12 8 views
0

QLocalServer/QLocalSocketの使用に問題があります。QLocalServer/QLocalSocketのメモリリーク

私はサーバーからクライアントに生のピクセルデータを送信していますが、処理中に大きなメモリリークがあります。 (私は、システム管理者に自分の目で確認する場合。)しかし、私は...その理由が何であるかを20メガバイト/ 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); 
} 

これらの2つのコードがよく通信することができますが、メモリは非常に鋭く増加したときに一定のレベル以上の終端されています。

connection-> reset()またはQByteArray :: clear()..のようにしようとしましたが、うまくいきませんでした。

私の問題はありますか?

使用方法についてQTcpServer/QTcpSocket ??これは私の問題を解決することができますか?

ご意見をお寄せください。ありがとう!!

+0

'in.readBytes'はメモリを割り当てます。あなたはどこから解放していますか? – peppe

+0

[QLocalSocketをクリアするにはどうすればいいですか?](http://stackoverflow.com/questions/41053457/how-can-i-clear-qlocalsocket) – ElDorado

答えて

0

これは、名前付きパイプがすべてのデータを閉じるまで保存するためです。 1つのパケットに対して十分なデータを送受信した後は、ソケット(送信側または受信側)にdisconnectFromServer()を呼び出す必要があります。