From 3dfc1c543feb12d381b6c0b8f9712e362fb90972 Mon Sep 17 00:00:00 2001 From: Janis Streib <me@janis-streib.de> Date: Fri, 19 May 2023 15:49:59 +0200 Subject: [PATCH] ADD: signal handler --- src/G4Export.cpp | 28 +++++++++++++++++++++------- 1 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/G4Export.cpp b/src/G4Export.cpp index ba61301..4ad269d 100644 --- a/src/G4Export.cpp +++ b/src/G4Export.cpp @@ -11,6 +11,7 @@ #include <ip/UdpSocket.h> #include <osc/OscOutboundPacketStream.h> #include <sstream> +#include <signal.h> using namespace clipp; using std::cout; using std::string; @@ -22,11 +23,11 @@ void* Collect(REND_STRUCT* prs){ - int i = 0; + int iter = 0; CG4Trk* pTrk = prs->pTrk; while (RunCollect){ // periodically check for new hubs coming on line - if(i % 1000 == 0) { + if(iter % 1000 == 0) { int numHubs; if (prs->tot_hubs_on_system!=prs->numHub){ prs->numHub=numHubs=prs->tot_hubs_on_system=pTrk->UpdateHubs(); @@ -44,7 +45,7 @@ } } - i++; + iter++; prs->hubreadmap=0; prs->tot_hubs_on_system=prs->pTrk->GetHubsPno(prs); char buffer[OUTPUT_BUFFER_SIZE]; @@ -54,20 +55,19 @@ if(!use_text) { p << osc::BeginBundleImmediate; } + auto dat = prs->hubList[i].GetPnoData(); for(int j=0;j<G4_SENSORS_PER_HUB;j++) { if(!prs->hubList[i].IsSenActive(j)){ continue; } - auto dat = prs->hubList[i].GetPnoData()[j]; - //printf("sns: %i: [%f;%f;%f],[%f,%f,%f]\n",i, dat[0],dat[1],dat[2], dat[3],dat[4],dat[5]); p << osc::BeginMessage( (string("/g4/hub/") + std::to_string(prs->hubList[i].GetId()) + string("/") + std::to_string(j)).c_str()); std::ostringstream ss; if(use_text) { - ss << "[" << dat[0] << "," << dat[1] << "," << dat[2] << "," << dat[3] << "," << dat[4] << "," << dat[5] << "]"; + ss << "[" << dat[j][0] << "," << dat[j][1] << "," << dat[j][2] << "," << dat[j][3] << "," << dat[j][4] << "," << dat[j][5] << "]"; auto res = ss.str(); p << res.c_str(); } else { - p << dat[0] << dat[1] << dat[2] << dat[3] << dat[4] << dat[5]; + p << dat[j][0] << dat[j][1] << dat[j][2] << dat[j][3] << dat[j][4] << dat[j][5]; } p << osc::EndMessage; } @@ -81,6 +81,11 @@ } return NULL; +} + +void sighandler(int s){ + printf("Caught signal %d\n",s); + RunCollect = 0; } int main(int argc,char* argv[]){ @@ -131,6 +136,15 @@ RunCollect=1; + // register signal handler + struct sigaction sigIntHandler; + + sigIntHandler.sa_handler = sighandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + + sigaction(SIGINT, &sigIntHandler, NULL); + Collect(&rs); delete[] rs.srcList; -- Gitblit v1.9.1