2009-06-25 52 views
1

我昨天問這個問題,因爲我沒有收到任何數據,但奇怪的是,當我在析構函數中使用等待時,我開始從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線程的數據更新其窗口小部件。

任何人都可以提出問題是什麼?之前有人做過這個。

+0

您似乎錯過了對問題的描述。不要以爲人們會閱讀你以前的問題(或者想要)。更好地完成這個問題 – 2009-06-25 05:09:30

回答

0

唯一想到的是,您正在使用QSocketNotifier * socketNotifier而沒有在socketNotifier->thread()線程中運行的事件循環。如果沒有事件循環正在運行,您將不會得到事件處理。沒有事件處理意味着沒有信號從QSocketNotifier發射。但是,如果您使用的是單獨的線程,則可能要使用阻止的I/O調用。