2016-05-09 9 views
-1

http://doc.qt.io/qt-5/qserialport.html#openQIODevice :: ReadWrite | QIODevice ::バッファなし - サポートされていないオープンモード

警告:モードのQIODevice ::読み取り専用、書き込み専用のQIODevice ::、またはのQIODevice ::読み書きなければなりません。他のモードはサポートされていません。

次のコードはシリアルポートを開きません。

if(serialPort.open (QIODevice::ReadWrite | QIODevice::Unbuffered)) 
    { 
     qDebug() << "asdasdas"; 
     serialPort.setDataBits(QSerialPort::Data8); 
     serialPort.setParity(QSerialPort::NoParity); 
     serialPort.setStopBits(QSerialPort::OneStop); 
    } 
    else 
    { 
     qDebug() << "QSerialPort::SerialPortError: " << serialPort.errorString(); 
    } 

バッファなしフラグを使用する方法は何ですか?

+0

この問題は、遅いと思われるコードを表示しないと答えられません。あなたの質問は、古典的なX-Yの問題です。あなたは、問題Xを解決する方法を本当に尋ねる間に、何の証明もなしに問題Yがあると思います。つまり、コードの開始が遅いということです。 –

答えて

1

バッファされていないフラグを使用する方法は何ですか?

ありません。 QSerialPortはサポートしていません。

悲しいかなか遅くなるバッファリングについてのあなたの仮定は、問題を示す測定値がない限り根拠がありません。私の賭けはあなたがそうしていないし、そのような測定値を持っていないということです。他にも問題があります。シリアルポートは通常、比較的低速の帯域幅ですが、バッファリングに二次的なコストがかかるようなことをしない限り、1メガビット/秒は問題になりません。持っている。

+0

私はバッファリングが何かを遅くしているとは言いませんでした。大きなパケットを送信するとプログラムが遅くなります。バッファリングが原因ではないことを確認したかっただけです。 –

+0

@TheIndependentAquariusシリアルポートを持つ「大きな」パケットはありません。何かを遅くするのに十分な大きさのものは、最速の「シリアル」ポートでも送信するのに数分かかるでしょう。最近、 'memcpy'はかなり速いです。バッファリングが原因でバッファリングが無効にならないようにするには、プロファイラの下で実行し、 'realloc'や' memcpy'のようなバッファリングに関連する関数に時間が費やされていることを確認します。 –

-1

それは原則的に、不可能である

データ伝送しながら、私のGUIが遅くなります。すべてのI/Oが非同期になるためです。ほとんどの場合、問題はあなたのコードにあります。

さらに、Qtのバージョンとお使いのOSに関する情報は提供していません。

PS:バッファリングされていないモードはあなたを助けません。また、QSerialPortはそれをサポートしていません。エラーコードはあなたに直接言います!わかりますか?

+0

編集した質問の一部ではないテキストを引用しています。 –