Move demodulator and main spectrum visual processors to threads
This commit is contained in:
parent
cd129e0726
commit
d1ed603ff0
|
@ -264,6 +264,7 @@ SET (cubicsdr_sources
|
||||||
src/process/ScopeVisualProcessor.cpp
|
src/process/ScopeVisualProcessor.cpp
|
||||||
src/process/SpectrumVisualProcessor.cpp
|
src/process/SpectrumVisualProcessor.cpp
|
||||||
src/process/FFTVisualDataThread.cpp
|
src/process/FFTVisualDataThread.cpp
|
||||||
|
src/process/SpectrumVisualDataThread.cpp
|
||||||
src/ui/GLPanel.cpp
|
src/ui/GLPanel.cpp
|
||||||
external/rtaudio/RtAudio.cpp
|
external/rtaudio/RtAudio.cpp
|
||||||
external/lodepng/lodepng.cpp
|
external/lodepng/lodepng.cpp
|
||||||
|
@ -318,6 +319,7 @@ SET (cubicsdr_headers
|
||||||
src/process/ScopeVisualProcessor.h
|
src/process/ScopeVisualProcessor.h
|
||||||
src/process/SpectrumVisualProcessor.h
|
src/process/SpectrumVisualProcessor.h
|
||||||
src/process/FFTVisualDataThread.h
|
src/process/FFTVisualDataThread.h
|
||||||
|
src/process/SpectrumVisualDataThread.h
|
||||||
src/ui/GLPanel.h
|
src/ui/GLPanel.h
|
||||||
src/ui/UITestCanvas.cpp
|
src/ui/UITestCanvas.cpp
|
||||||
src/ui/UITestCanvas.h
|
src/ui/UITestCanvas.h
|
||||||
|
|
|
@ -62,11 +62,11 @@ AppFrame::AppFrame() :
|
||||||
demodModeSelector->setHelpTip("Choose modulation type: Frequency Modulation, Amplitude Modulation and Lower, Upper or Double Side-Band.");
|
demodModeSelector->setHelpTip("Choose modulation type: Frequency Modulation, Amplitude Modulation and Lower, Upper or Double Side-Band.");
|
||||||
demodTray->Add(demodModeSelector, 2, wxEXPAND | wxALL, 0);
|
demodTray->Add(demodModeSelector, 2, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
wxGetApp().getDemodSpectrumProcesor()->setup(1024);
|
wxGetApp().getDemodSpectrumProcessor()->setup(1024);
|
||||||
demodSpectrumCanvas = new SpectrumCanvas(this, attribList);
|
demodSpectrumCanvas = new SpectrumCanvas(this, attribList);
|
||||||
demodSpectrumCanvas->setView(wxGetApp().getConfig()->getCenterFreq(), 300000);
|
demodSpectrumCanvas->setView(wxGetApp().getConfig()->getCenterFreq(), 300000);
|
||||||
demodVisuals->Add(demodSpectrumCanvas, 3, wxEXPAND | wxALL, 0);
|
demodVisuals->Add(demodSpectrumCanvas, 3, wxEXPAND | wxALL, 0);
|
||||||
wxGetApp().getDemodSpectrumProcesor()->attachOutput(demodSpectrumCanvas->getVisualDataQueue());
|
wxGetApp().getDemodSpectrumProcessor()->attachOutput(demodSpectrumCanvas->getVisualDataQueue());
|
||||||
|
|
||||||
demodVisuals->AddSpacer(1);
|
demodVisuals->AddSpacer(1);
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ AppFrame::AppFrame() :
|
||||||
demodWaterfallCanvas->attachSpectrumCanvas(demodSpectrumCanvas);
|
demodWaterfallCanvas->attachSpectrumCanvas(demodSpectrumCanvas);
|
||||||
demodSpectrumCanvas->attachWaterfallCanvas(demodWaterfallCanvas);
|
demodSpectrumCanvas->attachWaterfallCanvas(demodWaterfallCanvas);
|
||||||
demodVisuals->Add(demodWaterfallCanvas, 6, wxEXPAND | wxALL, 0);
|
demodVisuals->Add(demodWaterfallCanvas, 6, wxEXPAND | wxALL, 0);
|
||||||
wxGetApp().getDemodSpectrumProcesor()->attachOutput(demodWaterfallCanvas->getVisualDataQueue());
|
wxGetApp().getDemodSpectrumProcessor()->attachOutput(demodWaterfallCanvas->getVisualDataQueue());
|
||||||
|
|
||||||
demodTray->Add(demodVisuals, 30, wxEXPAND | wxALL, 0);
|
demodTray->Add(demodVisuals, 30, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
|
@ -113,9 +113,9 @@ AppFrame::AppFrame() :
|
||||||
vbox->AddSpacer(1);
|
vbox->AddSpacer(1);
|
||||||
|
|
||||||
wxBoxSizer *spectrumSizer = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer *spectrumSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
wxGetApp().getSpectrumProcesor()->setup(2048);
|
wxGetApp().getSpectrumProcessor()->setup(2048);
|
||||||
spectrumCanvas = new SpectrumCanvas(this, attribList);
|
spectrumCanvas = new SpectrumCanvas(this, attribList);
|
||||||
wxGetApp().getSpectrumProcesor()->attachOutput(spectrumCanvas->getVisualDataQueue());
|
wxGetApp().getSpectrumProcessor()->attachOutput(spectrumCanvas->getVisualDataQueue());
|
||||||
|
|
||||||
spectrumAvgMeter = new MeterCanvas(this, attribList);
|
spectrumAvgMeter = new MeterCanvas(this, attribList);
|
||||||
spectrumAvgMeter->setHelpTip("Spectrum averaging speed, click or drag to adjust.");
|
spectrumAvgMeter->setHelpTip("Spectrum averaging speed, click or drag to adjust.");
|
||||||
|
@ -370,7 +370,7 @@ AppFrame::AppFrame() :
|
||||||
float spectrumAvg = wxGetApp().getConfig()->getSpectrumAvgSpeed();
|
float spectrumAvg = wxGetApp().getConfig()->getSpectrumAvgSpeed();
|
||||||
|
|
||||||
spectrumAvgMeter->setLevel(spectrumAvg);
|
spectrumAvgMeter->setLevel(spectrumAvg);
|
||||||
wxGetApp().getSpectrumProcesor()->setFFTAverageRate(spectrumAvg);
|
wxGetApp().getSpectrumProcessor()->setFFTAverageRate(spectrumAvg);
|
||||||
|
|
||||||
int wflps =wxGetApp().getConfig()->getWaterfallLinesPerSec();
|
int wflps =wxGetApp().getConfig()->getWaterfallLinesPerSec();
|
||||||
|
|
||||||
|
@ -488,7 +488,7 @@ void AppFrame::OnMenu(wxCommandEvent& event) {
|
||||||
spectrumCanvas->setCenterFrequency(wxGetApp().getFrequency());
|
spectrumCanvas->setCenterFrequency(wxGetApp().getFrequency());
|
||||||
waterfallDataThread->setLinesPerSecond(DEFAULT_WATERFALL_LPS);
|
waterfallDataThread->setLinesPerSecond(DEFAULT_WATERFALL_LPS);
|
||||||
waterfallSpeedMeter->setLevel(sqrt(DEFAULT_WATERFALL_LPS));
|
waterfallSpeedMeter->setLevel(sqrt(DEFAULT_WATERFALL_LPS));
|
||||||
wxGetApp().getSpectrumProcesor()->setFFTAverageRate(0.65);
|
wxGetApp().getSpectrumProcessor()->setFFTAverageRate(0.65);
|
||||||
spectrumAvgMeter->setLevel(0.65);
|
spectrumAvgMeter->setLevel(0.65);
|
||||||
demodModeSelector->Refresh();
|
demodModeSelector->Refresh();
|
||||||
demodTuner->Refresh();
|
demodTuner->Refresh();
|
||||||
|
@ -607,12 +607,16 @@ void AppFrame::OnMenu(wxCommandEvent& event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppFrame::OnClose(wxCloseEvent& event) {
|
void AppFrame::OnClose(wxCloseEvent& event) {
|
||||||
|
wxGetApp().getDemodSpectrumProcessor()->removeOutput(demodSpectrumCanvas->getVisualDataQueue());
|
||||||
|
wxGetApp().getDemodSpectrumProcessor()->removeOutput(demodWaterfallCanvas->getVisualDataQueue());
|
||||||
|
wxGetApp().getSpectrumProcessor()->removeOutput(spectrumCanvas->getVisualDataQueue());
|
||||||
|
|
||||||
wxGetApp().getConfig()->setWindow(this->GetPosition(), this->GetClientSize());
|
wxGetApp().getConfig()->setWindow(this->GetPosition(), this->GetClientSize());
|
||||||
wxGetApp().getConfig()->setWindowMaximized(this->IsMaximized());
|
wxGetApp().getConfig()->setWindowMaximized(this->IsMaximized());
|
||||||
wxGetApp().getConfig()->setTheme(ThemeMgr::mgr.getTheme());
|
wxGetApp().getConfig()->setTheme(ThemeMgr::mgr.getTheme());
|
||||||
wxGetApp().getConfig()->setSnap(wxGetApp().getFrequencySnap());
|
wxGetApp().getConfig()->setSnap(wxGetApp().getFrequencySnap());
|
||||||
wxGetApp().getConfig()->setCenterFreq(wxGetApp().getFrequency());
|
wxGetApp().getConfig()->setCenterFreq(wxGetApp().getFrequency());
|
||||||
wxGetApp().getConfig()->setSpectrumAvgSpeed(wxGetApp().getSpectrumProcesor()->getFFTAverageRate());
|
wxGetApp().getConfig()->setSpectrumAvgSpeed(wxGetApp().getSpectrumProcessor()->getFFTAverageRate());
|
||||||
wxGetApp().getConfig()->setWaterfallLinesPerSec(waterfallDataThread->getLinesPerSecond());
|
wxGetApp().getConfig()->setWaterfallLinesPerSec(waterfallDataThread->getLinesPerSecond());
|
||||||
wxGetApp().getConfig()->save();
|
wxGetApp().getConfig()->save();
|
||||||
event.Skip();
|
event.Skip();
|
||||||
|
@ -742,7 +746,7 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
|
||||||
wxGetApp().getScopeProcessor()->run();
|
wxGetApp().getScopeProcessor()->run();
|
||||||
wxGetApp().getSpectrumDistributor()->run();
|
wxGetApp().getSpectrumDistributor()->run();
|
||||||
|
|
||||||
SpectrumVisualProcessor *proc = wxGetApp().getSpectrumProcesor();
|
SpectrumVisualProcessor *proc = wxGetApp().getSpectrumProcessor();
|
||||||
|
|
||||||
if (spectrumAvgMeter->inputChanged()) {
|
if (spectrumAvgMeter->inputChanged()) {
|
||||||
float val = spectrumAvgMeter->getInputValue();
|
float val = spectrumAvgMeter->getInputValue();
|
||||||
|
@ -759,15 +763,11 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
|
||||||
proc->setBandwidth(spectrumCanvas->getBandwidth());
|
proc->setBandwidth(spectrumCanvas->getBandwidth());
|
||||||
proc->setCenterFrequency(spectrumCanvas->getCenterFrequency());
|
proc->setCenterFrequency(spectrumCanvas->getCenterFrequency());
|
||||||
|
|
||||||
proc->run();
|
SpectrumVisualProcessor *dproc = wxGetApp().getDemodSpectrumProcessor();
|
||||||
|
|
||||||
SpectrumVisualProcessor *dproc = wxGetApp().getDemodSpectrumProcesor();
|
|
||||||
|
|
||||||
dproc->setView(demodWaterfallCanvas->getViewState());
|
dproc->setView(demodWaterfallCanvas->getViewState());
|
||||||
dproc->setBandwidth(demodWaterfallCanvas->getBandwidth());
|
dproc->setBandwidth(demodWaterfallCanvas->getBandwidth());
|
||||||
dproc->setCenterFrequency(demodWaterfallCanvas->getCenterFrequency());
|
dproc->setCenterFrequency(demodWaterfallCanvas->getCenterFrequency());
|
||||||
|
|
||||||
dproc->run();
|
|
||||||
|
|
||||||
SpectrumVisualProcessor *wproc = waterfallDataThread->getProcessor();
|
SpectrumVisualProcessor *wproc = waterfallDataThread->getProcessor();
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
IMPLEMENT_APP(CubicSDR)
|
IMPLEMENT_APP(CubicSDR)
|
||||||
|
|
||||||
CubicSDR::CubicSDR() : appframe(NULL), m_glContext(NULL), frequency(0), offset(0), ppm(0), snap(1), sampleRate(DEFAULT_SAMPLE_RATE), directSamplingMode(0),
|
CubicSDR::CubicSDR() : appframe(NULL), m_glContext(NULL), frequency(0), offset(0), ppm(0), snap(1), sampleRate(DEFAULT_SAMPLE_RATE), directSamplingMode(0),
|
||||||
sdrThread(NULL), sdrPostThread(NULL), pipeSDRCommand(NULL), pipeSDRIQData(NULL), pipeIQVisualData(NULL), pipeAudioVisualData(NULL), t_SDR(NULL), t_PostSDR(NULL) {
|
sdrThread(NULL), sdrPostThread(NULL), spectrumVisualThread(NULL), demodVisualThread(NULL), pipeSDRCommand(NULL), pipeSDRIQData(NULL), pipeIQVisualData(NULL), pipeAudioVisualData(NULL), t_SDR(NULL), t_PostSDR(NULL) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,9 @@ bool CubicSDR::OnInit() {
|
||||||
directSamplingMode = 0;
|
directSamplingMode = 0;
|
||||||
|
|
||||||
// Visual Data
|
// Visual Data
|
||||||
|
spectrumVisualThread = new SpectrumVisualDataThread();
|
||||||
|
demodVisualThread = new SpectrumVisualDataThread();
|
||||||
|
|
||||||
pipeIQVisualData = new DemodulatorThreadInputQueue();
|
pipeIQVisualData = new DemodulatorThreadInputQueue();
|
||||||
pipeIQVisualData->set_max_num_items(1);
|
pipeIQVisualData->set_max_num_items(1);
|
||||||
|
|
||||||
|
@ -68,8 +71,8 @@ bool CubicSDR::OnInit() {
|
||||||
spectrumDistributor.attachOutput(pipeDemodIQVisualData);
|
spectrumDistributor.attachOutput(pipeDemodIQVisualData);
|
||||||
spectrumDistributor.attachOutput(pipeSpectrumIQVisualData);
|
spectrumDistributor.attachOutput(pipeSpectrumIQVisualData);
|
||||||
|
|
||||||
demodSpectrumProcessor.setInput(pipeDemodIQVisualData);
|
getDemodSpectrumProcessor()->setInput(pipeDemodIQVisualData);
|
||||||
spectrumProcessor.setInput(pipeSpectrumIQVisualData);
|
getSpectrumProcessor()->setInput(pipeSpectrumIQVisualData);
|
||||||
|
|
||||||
pipeAudioVisualData = new DemodulatorThreadOutputQueue();
|
pipeAudioVisualData = new DemodulatorThreadOutputQueue();
|
||||||
pipeAudioVisualData->set_max_num_items(1);
|
pipeAudioVisualData->set_max_num_items(1);
|
||||||
|
@ -80,7 +83,7 @@ bool CubicSDR::OnInit() {
|
||||||
pipeSDRIQData = new SDRThreadIQDataQueue();
|
pipeSDRIQData = new SDRThreadIQDataQueue();
|
||||||
pipeSDRCommand = new SDRThreadCommandQueue();
|
pipeSDRCommand = new SDRThreadCommandQueue();
|
||||||
|
|
||||||
pipeSDRIQData->set_max_num_items(1);
|
pipeSDRIQData->set_max_num_items(100);
|
||||||
|
|
||||||
sdrThread = new SDRThread();
|
sdrThread = new SDRThread();
|
||||||
sdrThread->setInputQueue("SDRCommandQueue",pipeSDRCommand);
|
sdrThread->setInputQueue("SDRCommandQueue",pipeSDRCommand);
|
||||||
|
@ -134,6 +137,8 @@ bool CubicSDR::OnInit() {
|
||||||
|
|
||||||
t_PostSDR = new std::thread(&SDRPostThread::threadMain, sdrPostThread);
|
t_PostSDR = new std::thread(&SDRPostThread::threadMain, sdrPostThread);
|
||||||
t_SDR = new std::thread(&SDRThread::threadMain, sdrThread);
|
t_SDR = new std::thread(&SDRThread::threadMain, sdrThread);
|
||||||
|
t_SpectrumVisual = new std::thread(&SpectrumVisualDataThread::threadMain, spectrumVisualThread);
|
||||||
|
t_DemodVisual = new std::thread(&SpectrumVisualDataThread::threadMain, demodVisualThread);
|
||||||
|
|
||||||
appframe = new AppFrame();
|
appframe = new AppFrame();
|
||||||
if (dev != NULL) {
|
if (dev != NULL) {
|
||||||
|
@ -167,6 +172,13 @@ int CubicSDR::OnExit() {
|
||||||
std::cout << "Terminating SDR post-processing thread.." << std::endl;
|
std::cout << "Terminating SDR post-processing thread.." << std::endl;
|
||||||
sdrPostThread->terminate();
|
sdrPostThread->terminate();
|
||||||
t_PostSDR->join();
|
t_PostSDR->join();
|
||||||
|
|
||||||
|
std::cout << "Terminating Visual Processor threads.." << std::endl;
|
||||||
|
spectrumVisualThread->terminate();
|
||||||
|
t_SpectrumVisual->join();
|
||||||
|
|
||||||
|
demodVisualThread->terminate();
|
||||||
|
t_DemodVisual->join();
|
||||||
|
|
||||||
delete sdrThread;
|
delete sdrThread;
|
||||||
delete t_SDR;
|
delete t_SDR;
|
||||||
|
@ -174,6 +186,11 @@ int CubicSDR::OnExit() {
|
||||||
delete sdrPostThread;
|
delete sdrPostThread;
|
||||||
delete t_PostSDR;
|
delete t_PostSDR;
|
||||||
|
|
||||||
|
delete t_SpectrumVisual;
|
||||||
|
delete spectrumVisualThread;
|
||||||
|
delete t_DemodVisual;
|
||||||
|
delete demodVisualThread;
|
||||||
|
|
||||||
delete pipeSDRCommand;
|
delete pipeSDRCommand;
|
||||||
|
|
||||||
delete pipeIQVisualData;
|
delete pipeIQVisualData;
|
||||||
|
@ -273,12 +290,12 @@ ScopeVisualProcessor *CubicSDR::getScopeProcessor() {
|
||||||
return &scopeProcessor;
|
return &scopeProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
SpectrumVisualProcessor *CubicSDR::getSpectrumProcesor() {
|
SpectrumVisualProcessor *CubicSDR::getSpectrumProcessor() {
|
||||||
return &spectrumProcessor;
|
return spectrumVisualThread->getProcessor();
|
||||||
}
|
}
|
||||||
|
|
||||||
SpectrumVisualProcessor *CubicSDR::getDemodSpectrumProcesor() {
|
SpectrumVisualProcessor *CubicSDR::getDemodSpectrumProcessor() {
|
||||||
return &demodSpectrumProcessor;
|
return demodVisualThread->getProcessor();
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualDataDistributor<DemodulatorThreadIQData> *CubicSDR::getSpectrumDistributor() {
|
VisualDataDistributor<DemodulatorThreadIQData> *CubicSDR::getSpectrumDistributor() {
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "ScopeVisualProcessor.h"
|
#include "ScopeVisualProcessor.h"
|
||||||
#include "SpectrumVisualProcessor.h"
|
#include "SpectrumVisualProcessor.h"
|
||||||
|
#include "SpectrumVisualDataThread.h"
|
||||||
|
|
||||||
#include <wx/cmdline.h>
|
#include <wx/cmdline.h>
|
||||||
|
|
||||||
|
@ -57,8 +58,8 @@ public:
|
||||||
int getDevice();
|
int getDevice();
|
||||||
|
|
||||||
ScopeVisualProcessor *getScopeProcessor();
|
ScopeVisualProcessor *getScopeProcessor();
|
||||||
SpectrumVisualProcessor *getSpectrumProcesor();
|
SpectrumVisualProcessor *getSpectrumProcessor();
|
||||||
SpectrumVisualProcessor *getDemodSpectrumProcesor();
|
SpectrumVisualProcessor *getDemodSpectrumProcessor();
|
||||||
VisualDataDistributor<DemodulatorThreadIQData> *getSpectrumDistributor();
|
VisualDataDistributor<DemodulatorThreadIQData> *getSpectrumDistributor();
|
||||||
|
|
||||||
DemodulatorThreadOutputQueue* getAudioVisualQueue();
|
DemodulatorThreadOutputQueue* getAudioVisualQueue();
|
||||||
|
@ -96,6 +97,8 @@ private:
|
||||||
|
|
||||||
SDRThread *sdrThread;
|
SDRThread *sdrThread;
|
||||||
SDRPostThread *sdrPostThread;
|
SDRPostThread *sdrPostThread;
|
||||||
|
SpectrumVisualDataThread *spectrumVisualThread;
|
||||||
|
SpectrumVisualDataThread *demodVisualThread;
|
||||||
|
|
||||||
SDRThreadCommandQueue* pipeSDRCommand;
|
SDRThreadCommandQueue* pipeSDRCommand;
|
||||||
SDRThreadIQDataQueue* pipeSDRIQData;
|
SDRThreadIQDataQueue* pipeSDRIQData;
|
||||||
|
@ -106,13 +109,13 @@ private:
|
||||||
DemodulatorThreadInputQueue* pipeWaterfallIQVisualData;
|
DemodulatorThreadInputQueue* pipeWaterfallIQVisualData;
|
||||||
|
|
||||||
ScopeVisualProcessor scopeProcessor;
|
ScopeVisualProcessor scopeProcessor;
|
||||||
SpectrumVisualProcessor spectrumProcessor;
|
|
||||||
SpectrumVisualProcessor demodSpectrumProcessor;
|
|
||||||
|
|
||||||
VisualDataDistributor<DemodulatorThreadIQData> spectrumDistributor;
|
VisualDataDistributor<DemodulatorThreadIQData> spectrumDistributor;
|
||||||
|
|
||||||
std::thread *t_SDR;
|
std::thread *t_SDR;
|
||||||
std::thread *t_PostSDR;
|
std::thread *t_PostSDR;
|
||||||
|
std::thread *t_SpectrumVisual;
|
||||||
|
std::thread *t_DemodVisual;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const wxCmdLineEntryDesc commandLineInfo [] =
|
static const wxCmdLineEntryDesc commandLineInfo [] =
|
||||||
|
|
|
@ -59,6 +59,6 @@ void FFTVisualDataThread::run() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "FFT visual data thread terminated." << std::endl;
|
std::cout << "FFT visual data thread done." << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include "SpectrumVisualDataThread.h"
|
||||||
|
#include "CubicSDR.h"
|
||||||
|
|
||||||
|
SpectrumVisualDataThread::SpectrumVisualDataThread() {
|
||||||
|
}
|
||||||
|
|
||||||
|
SpectrumVisualDataThread::~SpectrumVisualDataThread() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SpectrumVisualProcessor *SpectrumVisualDataThread::getProcessor() {
|
||||||
|
return &sproc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpectrumVisualDataThread::run() {
|
||||||
|
std::cout << "Spectrum visual data thread started." << std::endl;
|
||||||
|
|
||||||
|
while(!terminated) {
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(12));
|
||||||
|
sproc.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Spectrum visual data thread done." << std::endl;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IOThread.h"
|
||||||
|
#include "SpectrumVisualProcessor.h"
|
||||||
|
|
||||||
|
class SpectrumVisualDataThread : public IOThread {
|
||||||
|
public:
|
||||||
|
SpectrumVisualDataThread();
|
||||||
|
~SpectrumVisualDataThread();
|
||||||
|
SpectrumVisualProcessor *getProcessor();
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
SpectrumVisualProcessor sproc;
|
||||||
|
};
|
Loading…
Reference in New Issue