我昨天問這個問題,因爲我沒有收到任何數據,但奇怪的是,當我在析構函數中使用等待時,我開始從QSocketNotifier
收到通知。問題的其餘部分是相同的。有人能提出一些建議嗎 我已經創建了一個示例應用程序,從單獨的線程開始讀取和處理來自串行端口的數據。 QSocketNotifier
用於檢測數據是否到達串口。我在線程的運行函數中使用exec()
語句啓動事件循環。但是,只有在套接字通知程序運行後才運行應用程序,串行端口激活的信號永遠不會生成。而且一旦生成它就會非常快速地生成,並不等同於發送設備的幀速率。使用事件循環和QSocketNotifiers線程觀察使用線程
下面是用於串行通信的線程的簡短代碼示例:
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
}
注:克拉斯是一個線程和GUI線程的成員,並在GUI線程c的實例化」 TOR。定期使用來自klass線程的數據更新其窗口小部件。
任何人都可以提出問題是什麼?之前有人做過這個。
您似乎錯過了對問題的描述。不要以爲人們會閱讀你以前的問題(或者想要)。更好地完成這個問題 – 2009-06-25 05:09:30