Example #1
0
void CleanUpEverything()
{
   auto glbl = globalStruct::GetGlobals();
   if (!glbl)
      return;

   auto svr = glbl->GetServer();
   if (svr)
   {
      svr->Stop();
   }

   auto strm = glbl->GetStreamer();
   if (strm)
   {
      strm->stopStream();
   }
   auto pipe = glbl->GetPipe();
   if (pipe)
   {
      pipe->Cleanup();
   }
   glbl->work_guard.reset();
   auto svc = glbl->GetService();

   glbl->ResetAllPointers();

   svr.reset();
   strm.reset();
   pipe.reset();

   if (svc && !svc->stopped())
   {
      svc->stop();
   }
   std::for_each(glbl->globalThreads.begin(), glbl->globalThreads.end(),
                 [](decltype(*glbl->globalThreads.begin())& thr)
                 {
                    thr.join();
                 });
   svc.reset();
   auto trkr = glbl->GetTracker();
   if (trkr)
   {
      trkr->WaitUntilThreadVecEmpty();
      trkr.reset();
      std::shared_ptr<FunctionUsageTracker> resetTracker;
      std::atomic_store(&glbl->fcnTracker, resetTracker);
      std::this_thread::sleep_for(std::chrono::seconds(10)); // Wait some time for threads to exit
   }
   glbl.reset();
   globalStruct::nullifyGlobals();
}
Example #2
0
	/**
	\brief Get the system being tracked on, which is referred to by the tracker.
	*/
	inline
	const System& GetSystem() const 
	{ return GetTracker().GetSystem();}