From 8929b92a2d47eede4662a36323cabffbc1fc5480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Sandstr=C3=B6m?= Date: Tue, 7 Apr 2020 20:54:28 +0200 Subject: [PATCH] Worker thread WIP.. --- .../ecmcPlugin_FFTApp/src/ecmcFFT.cpp | 25 ++++++++++++++++++- .../ecmcPlugin_FFTApp/src/ecmcFFT.h | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp index 0a3d6fe..9cace46 100644 --- a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp +++ b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.cpp @@ -27,6 +27,8 @@ #include "ecmcFFT.h" #include "ecmcPluginClient.h" #include "ecmcAsynPortDriver.h" +#include "epicsThread.h" + // New data callback from ecmc static int printMissingObjError = 1; @@ -48,6 +50,15 @@ void f_dataUpdatedCallback(uint8_t* data, size_t size, ecmcEcDataType dt, void* fftObj->dataUpdatedCallback(data,size,dt); } +void f_worker(void *obj) { + if(!obj) { + printf("%s/%s:%d: Error: Worker thread FFT object NULL..\n", + __FILE__, __FUNCTION__, __LINE__); + return; + } + ecmcFFT * fftObj = (ecmcFFT*)obj; + fftObj->doCalcWorker(); +} /** ecmc FFT class * This object can throw: @@ -127,7 +138,13 @@ ecmcFFT::ecmcFFT(int fftIndex, // index of this object (if several is cr // Allocate KissFFT fftDouble_ = new kissfft(cfgNfft_,false); - + + // Create worker thread + std::string threadname = "ecmc." + ECMC_PLUGIN_ASYN_PREFIX +to_string(objectId_); + if(epicsThreadCreate(threadname.c_str(), 0, 32768, f_worker, this) == NULL) { + throw std::runtime_error("Error: Failed create worker thread."); + } + initAsyn(); } @@ -793,3 +810,9 @@ void ecmcFFT::sampleData() { dataItemInfo_->dataType); } +// Called from worker thread +void ecmcFFT::doCalcWorker() { + while(true) { + sleep(10); + } +} \ No newline at end of file diff --git a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h index 53902a8..38c1a76 100644 --- a/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h +++ b/ecmcPlugin_FFT-loc/ecmcPlugin_FFTApp/src/ecmcFFT.h @@ -45,7 +45,7 @@ class ecmcFFT { FFT_STATUS getStatusFFT(); void clearBuffers(); void triggFFT(); - + void doCalcWorker(); // Called from worker thread calc the results /** Do not use this as same time as callback! * if used it should be called from ecmc realtime callback*/ void sampleData();