MainWindow
::MainWindow(QWidget *parent
) : ui(new Ui::MainWindow)
{
backgroundWorker = new workerThread;
//Setup callback for cleanup when it finishes
connect(backgroundWorker, SIGNAL(finished()), backgroundWorker, SLOT(deleteLater()));
connect(backgroundWorker, SIGNAL(FrameReady()), this, SLOT(update_detection_lb()));
connect(ui->StartStopStreaming_pb, SIGNAL(clicked()), this, SLOT(Streaming()));
// Set gui labels
ui
->Gain_lb
->setText
(QString("%1 dB").
arg(backgroundWorker
->gain
));
ui
->fc_lb
->setText
(QString("%1 MHz").
arg(backgroundWorker
->freq
/ 1e6
));
ui
->adr_lb
->setText
(QString::fromStdString(backgroundWorker
->addr
));
}
// Streaming button
void MainWindow::Streaming()
{
if(ui->StartStopStreaming_pb->text() == "Start streaming")
{
ui->StartStopStreaming_pb->setText("Stop streaming");
std::cout << "Start streaming in background thread" << std::endl;
if(backgroundWorker)
{
backgroundWorker->m_abort = false;
backgroundWorker
->start
(QThread::HighestPriority);
}
}
else{
ui->StartStopStreaming_pb->setText("Start streaming");
std::cout << "Stop streaming and terminate background thread" << std::endl;
backgroundWorker->m_abort = true;
if(!backgroundWorker->wait(5000))
{
std::cout << "Thread deadlock detected, bad things may happen!" << std::endl;
backgroundWorker->terminate();
backgroundWorker->wait();
}
}
}
void workerThread::run()
{
std::cout << "Thread running" << std::endl;
while(m_abort == false)
{
// Do some streaming stuff
}
std::cout << "Thread terminated" << std::endl;
emit finished();
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
backgroundWorker = new workerThread;
//Setup callback for cleanup when it finishes
connect(backgroundWorker, SIGNAL(finished()), backgroundWorker, SLOT(deleteLater()));
connect(backgroundWorker, SIGNAL(FrameReady()), this, SLOT(update_detection_lb()));
connect(ui->StartStopStreaming_pb, SIGNAL(clicked()), this, SLOT(Streaming()));
// Set gui labels
ui->Gain_lb->setText(QString("%1 dB").arg(backgroundWorker->gain));
ui->fc_lb->setText(QString("%1 MHz").arg(backgroundWorker->freq / 1e6));
ui->adr_lb->setText(QString::fromStdString(backgroundWorker->addr));
}
// Streaming button
void MainWindow::Streaming()
{
if(ui->StartStopStreaming_pb->text() == "Start streaming")
{
ui->StartStopStreaming_pb->setText("Stop streaming");
std::cout << "Start streaming in background thread" << std::endl;
if(backgroundWorker)
{
backgroundWorker->m_abort = false;
backgroundWorker->start(QThread::HighestPriority);
}
}
else{
ui->StartStopStreaming_pb->setText("Start streaming");
std::cout << "Stop streaming and terminate background thread" << std::endl;
backgroundWorker->m_abort = true;
if(!backgroundWorker->wait(5000))
{
std::cout << "Thread deadlock detected, bad things may happen!" << std::endl;
backgroundWorker->terminate();
backgroundWorker->wait();
}
}
}
void workerThread::run()
{
std::cout << "Thread running" << std::endl;
while(m_abort == false)
{
// Do some streaming stuff
}
std::cout << "Thread terminated" << std::endl;
emit finished();
}
To copy to clipboard, switch view to plain text mode
Bookmarks