Я задал этот вопрос вчера, так как не получал никаких данных, но странно, когда я использовал wait в деструкторе, я начал получать уведомление от 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.
Кто-нибудь может подсказать, в чем проблема? Кто-то делал это раньше.