昨日、データを受け取っていなかったのでこの質問をしましたが、奇妙なことに、デストラクタで待機を使用すると、から通知を受け取り始めましたQSocketNotifier
。質問の残りの部分は同じです。誰かが何かを提案できますか?シリアル ポートからデータを読み取って処理する別のスレッドを開始するサンプル アプリケーションを作成しました。QSocketNotifier
データがシリアルポートに到着したかどうかを検出するために使用されます。exec()
スレッドの実行関数内のステートメントを使用して、イベント ループを開始します。ただし、ソケット通知機能が動作したときにのみアプリケーションを実行している間は、シリアル ポート アクティベーションのシグナルは生成されません。一度生成されると、非常に高速に生成され、送信デバイスのフレーム レートと同等ではありませんでした。
シリアル コミュニケーター スレッドの簡単なコード サンプルを次に示します。
SerialPortWatchOne.cpp
//constructor
klass::klass()
{
//setport configuration
//miscellaneous initialization
QSocketNotifier* notifier = new QSocketNotifier(mPort->GetFileDescriptor, QSocketNotifier::Read,this);
connect(notifier,SIGNAL(activated(int)),this,SLOT(ReadAndProcessData()));
}
void klass::run()
{
exec(); //this starts an event loop where by Qt signal handling is enabled
}
void klass::ReadAndProcessData()
{
FlushBuf();
int bytes_read=mPort->ReadPort(mBuf,1000);
if(bytes_read>0)
//Process data
}
~klass::klass()
{
//desctruction code;
wait(); //so that thread cleanly releases all resources before exit
}
注: klass はスレッドであり、GUI スレッドのメンバーであり、GUI スレッド c'tor でインスタンス化されます。GUI は定期的にウィジェットを klass スレッドからのデータで更新します。
誰が問題が何であるかを提案できますか? 誰かが前にこれをやったことがありますか。