QTでアプリケーションを作成しています。QExtSerialPort を使用して、コンプのシリアル ポートからデータを受信します (readyread() シグナルが発行されるたびに)。また、特定の間隔で他のことを実行しているタイマーもいくつかあります。ここで、タイマーがオンになっている場合、readyread 信号のすべてのデータが、タイマーがオンになっていない場合よりもはるかに少なく送信されるわけではないことに気付きました。シリアルポートのすべてのデータが受信されていることを確認する方法は QT にありますか? おそらく、readyread イベントなどに高い優先順位を設定することでしょうか?
5429 次
1 に答える
6
シグナルスロット接続とイベントシステムには違いがあります。信号の発信とスロットのトリガーは別個のものではありません。信号が発信されると、接続されたスロットが機能し始めます。したがって、それら (信号) が失われることはありません。
すべてのイベントはアプリケーションを介して送信され、受信されますが、後で発生する可能性があります。制御がメイン イベント ループに戻ると、キューに格納されているすべてのイベントが処理されます。
自分でイベントを投稿する場合は、
static void QCoreApplication::postEvent ( QObject* receiver, QEvent* event, int priority );
メソッドを使用できます。イベントは優先度の降順でソートされます。つまり、優先度の高いイベントは、優先度の低いイベントの前にキューに入れられます。優先順位は、INT_MAX から INT_MIN までの任意の整数値にすることができます。詳細については、Qt::EventPriority を参照してください。優先度が等しいイベントは、投稿された順序で処理されます。
于 2012-09-05T18:17:42.793 に答える