Disconnect on ^C in capture utility.

This commit is contained in:
Bartosz Taudul 2019-01-24 19:13:09 +01:00
parent 66a5e06803
commit 34c9cf512e

View File

@ -5,6 +5,7 @@
#include <chrono> #include <chrono>
#include <inttypes.h> #include <inttypes.h>
#include <mutex> #include <mutex>
#include <signal.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -15,6 +16,14 @@
#include "../../server/TracyWorker.hpp" #include "../../server/TracyWorker.hpp"
#include "getopt.h" #include "getopt.h"
struct sigaction oldsigint;
bool disconnect = false;
void SigInt( int )
{
disconnect = true;
}
static const char* TimeToString( int64_t ns ) static const char* TimeToString( int64_t ns )
{ {
enum { Pool = 8 }; enum { Pool = 8 };
@ -156,10 +165,21 @@ int main( int argc, char** argv )
while( !worker.HasData() ) std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); while( !worker.HasData() ) std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
printf( "\nQueue delay: %s\nTimer resolution: %s\n", TimeToString( worker.GetDelay() ), TimeToString( worker.GetResolution() ) ); printf( "\nQueue delay: %s\nTimer resolution: %s\n", TimeToString( worker.GetDelay() ), TimeToString( worker.GetResolution() ) );
struct sigaction sigint;
memset( &sigint, 0, sizeof( sigint ) );
sigint.sa_handler = SigInt;
sigaction( SIGINT, &sigint, &oldsigint );
auto& lock = worker.GetMbpsDataLock(); auto& lock = worker.GetMbpsDataLock();
while( worker.IsConnected() ) while( worker.IsConnected() )
{ {
if( disconnect )
{
worker.Disconnect();
disconnect = false;
}
lock.lock(); lock.lock();
const auto mbps = worker.GetMbpsData().back(); const auto mbps = worker.GetMbpsData().back();
const auto compRatio = worker.GetCompRatio(); const auto compRatio = worker.GetCompRatio();