2017-11-28 40 views
0

QSerialPortを使用してシリアルデバイスに書き込むツールを作成しました。私は次のエラーメッセージが表示されるまで、一定の時間のためにそれを実行します:Qt5 - ASSERT: "bytesTransferred == writeChunkBuffer.size()"

ASSERT: "bytesTransferredが== writeChunkBuffer.size()" ファイルに qserialport_win.cpp、ライン511

マイ送信機能

/** 
* @brief Send text to device 
* @param text 
* @return Success/Fail 
*/ 
bool Serial::send(QString text) 
{ 
    if (connectionStatus && qsp.isWritable()) { 
     QByteArray buffer = text.toLatin1(); 

     if (buffer.size() != qsp.write(buffer)) 
      qDebug() << "Send does not work"; 

     qsp.flush(); 
     msleep(15); 

     return true; 
    } else { 
     return false; 
    } 
} 

私はそれを正しく理解していれば、私は15msのを待って、その後、それを繰り返して、デバイスへのフラッシュを(20文字程度です)のテキストを記述します。このようになります。なぜこのメッセージが出るのか分かりません。

//編集:

しばらくすると、問題の原因がわかりました。私は言及するのを忘れた、なぜ私は15ミリ秒待つ。それはドキュメントの一部であり、私がデータを送った後に待つ。データを送信することに関連する最大の問題は、別のスレッドでQSerialPortを実行することでした。それを使うことで、私は困っている。私はそれをMainThreadに移し、Qtのシグナルスロットデザインを使用しました。

答えて

0

使用しているAPIまたはどのようにそれが動作を知らなくても、write()方法が提供されるすべてのデータを転送すべき理由は固有の理由はない、特にそれは書き込み回数を返します。それがないことは明らか信号を一度にすべてを転送してください。

唯一の問題はアサーション自体です。データが書き込まれるまで、ループにする必要があります。すべてが1回の書き込みで書かれているとは限りません。あなたが送信しているデバイスを推測しようとする無駄な試みで、あなたは書き込みの間に眠ってはいけません。これは文字どおり時間の無駄です。