public void exit(){
  exitCalled=true;
  if (threadMap != null) {
    deleteAllThreads();
    log.info("----------------------------- ThreadMan exit -----------------------------");
    if (DurationStatistics.collectStatistics) {
      statistics.exit();
      log.info(String.format("ThreadMan Statistics (%,d cycles in %.3fs):",statistics.allCycles,statistics.getDurationMillis() / 1000.0));
      Collections.sort(statistics.threads);
      for (      Statistics.ThreadStatistics threadStatistics : statistics.threads) {
        double percentage=0;
        if (statistics.allCycles != 0) {
          percentage=(threadStatistics.runClocks / (double)statistics.allCycles) * 100;
        }
        log.info(String.format("    Thread %-30s %,12d cycles (%5.2f%%)",threadStatistics.getQuotedName(),threadStatistics.runClocks,percentage));
      }
    }
  }
}

public void exit ( ) { exitCalled = true ; if ( threadMap != null ) { deleteAllThreads ( ) ; log . info ( "----------------------------- ThreadMan exit -----------------------------" ) ; if ( DurationStatistics . collectStatistics ) { statistics . exit ( ) ; log . info ( String . format ( "ThreadMan Statistics (%,d cycles in %.3fs):" , statistics . allCycles , statistics . getDurationMillis ( ) / 1000.0 ) ) ; Collections . sort ( statistics . threads ) ; for ( Statistics . ThreadStatistics threadStatistics : statistics . threads ) { double percentage = 0 ; if ( statistics . allCycles != 0 ) { percentage = ( threadStatistics . runClocks / ( double ) statistics . allCycles ) * 100 ; } log . info ( String . format ( "    Thread %-30s %,12d cycles (%5.2f%%)" , threadStatistics . getQuotedName ( ) , threadStatistics . runClocks , percentage ) ) ; } } } }
to be called when exiting the emulation
