Beispiel #1
0
	float getCpuUsage()	//获取CPU的占用率
	{
#if _WIN32_WINNT < 0x0501
		return 0.0f;
#else
		static FILETIME prevSysKernel, prevSysUser;
		static FILETIME prevProcKernel, prevProcUser;
		static bool isFirstRun = true;

		FILETIME sysIdle, sysKernel, sysUser;
		FILETIME procCreation, procExit, procKernel, procUser;

		if (!GetSystemTimes(&sysIdle, &sysKernel, &sysUser) ||
			!GetProcessTimes(GetCurrentProcess(), &procCreation, &procExit, &procKernel, &procUser))
		{// can't get time info so return
			return -1.;
		}
		// check for first call
		if (isFirstRun)
		{
			isFirstRun = false;
			// save time info before return
			prevSysKernel.dwLowDateTime = sysKernel.dwLowDateTime;
			prevSysKernel.dwHighDateTime = sysKernel.dwHighDateTime;

			prevSysUser.dwLowDateTime = sysUser.dwLowDateTime;
			prevSysUser.dwHighDateTime = sysUser.dwHighDateTime;

			prevProcKernel.dwLowDateTime = procKernel.dwLowDateTime;
			prevProcKernel.dwHighDateTime = procKernel.dwHighDateTime;

			prevProcUser.dwLowDateTime = procUser.dwLowDateTime;
			prevProcUser.dwHighDateTime = procUser.dwHighDateTime;

			return -1.;
		}

		ULONGLONG sysKernelDiff = subtractTime(sysKernel, prevSysKernel);
		ULONGLONG sysUserDiff = subtractTime(sysUser, prevSysUser);

		ULONGLONG procKernelDiff = subtractTime(procKernel, prevProcKernel);
		ULONGLONG procUserDiff = subtractTime(procUser, prevProcUser);

		ULONGLONG sysTotal = sysKernelDiff + sysUserDiff;
		ULONGLONG procTotal = procKernelDiff + procUserDiff;

		return (float)((100.0 * procTotal) / sysTotal);
#endif
	}
Beispiel #2
0
void Logger::logPrint( bool hex, const char * const filepath, const int line, const int level, const char *fstring, ... )
{
  if ( level <= mEffectiveLevel )
  {
    char      classString[4];
    char      timeString[64];
    char      logString[8192];
    va_list     argPtr;
    struct timeval  timeVal;

    const char * const file = basename(filepath);
    
    if ( level < PANIC || level > DEBUG9 )
      Panic( "Invalid logger level %d", level );

    strncpy( classString, smCodes[level].c_str(), sizeof(classString) );

    gettimeofday( &timeVal, NULL );

  #if 0
    if ( logRuntime )
    {
      static struct timeval logStart;

      subtractTime( &timeVal, &logStart );

      snprintf( timeString, sizeof(timeString), "%ld.%03ld", timeVal.tv_sec, timeVal.tv_usec/1000 );
    }
    else
    {
  #endif
      char *timePtr = timeString;
      timePtr += strftime( timePtr, sizeof(timeString), "%x %H:%M:%S", localtime(&timeVal.tv_sec) );
      snprintf( timePtr, sizeof(timeString)-(timePtr-timeString), ".%06ld", timeVal.tv_usec );
  #if 0
    }
  #endif

    pid_t tid;
#ifdef __FreeBSD__
     long lwpid;
     thr_self(&lwpid);
     tid = lwpid;

    if (tid < 0 ) // Thread/Process id
#else
#ifdef HAVE_SYSCALL
  #ifdef __FreeBSD_kernel__
    if ( (syscall(SYS_thr_self, &tid)) < 0 ) // Thread/Process id

  # else
  // SOLARIS doesn't have SYS_gettid; don't assume
    #ifdef SYS_gettid
    if ( (tid = syscall(SYS_gettid)) < 0 ) // Thread/Process id
    #endif // SYS_gettid
  #endif
#endif // HAVE_SYSCALL
#endif
    tid = getpid(); // Process id

    char *logPtr = logString;
    logPtr += snprintf( logPtr, sizeof(logString), "%s %s[%d].%s-%s/%d [", 
          timeString,
          mId.c_str(),
          tid,
          classString,
          file,
          line
        );
    char *syslogStart = logPtr;

    va_start( argPtr, fstring );
    if ( hex )
    {
      unsigned char *data = va_arg( argPtr, unsigned char * );
      int len = va_arg( argPtr, int );
      int i;
      logPtr += snprintf( logPtr, sizeof(logString)-(logPtr-logString), "%d:", len );
      for ( i = 0; i < len; i++ )
      {
        logPtr += snprintf( logPtr, sizeof(logString)-(logPtr-logString), " %02x", data[i] );
      }
    }
    else
    {