コード例 #1
0
ファイル: timers.cpp プロジェクト: RKelson93/mushclient
void CMUSHclientDoc::ResetOneTimer (CTimer * timer_item)
  {
CmcDateTime tNow = CmcDateTime::GetTimeNow();
CmcDateTimeSpan tsOneDay (1, 0, 0, 0);

  if (!timer_item->bEnabled)    // ignore un-enabled timers
    return;

// so we can see when it is likely to fire next 

  timer_item->tWhenFired = tNow;

// for timers that go off "at" a time, find today's date, and move the time in

  if (timer_item->iType == CTimer::eAtTime)
    {

    timer_item->tFireTime = CmcDateTime (tNow.GetYear (), tNow.GetMonth (), 
                                         tNow.GetDay (),  timer_item->iAtHour, 
                                         timer_item->iAtMinute, timer_item->fAtSecond);

// if this time has passed, go onto tomorrow

    if (timer_item->tFireTime < tNow)
      timer_item->tFireTime += tsOneDay;
    }
  else    // for periodic timers, find "now" and add the period to it
    timer_item->tFireTime = tNow + CmcDateTimeSpan (0,    // now plus the interval
                                              timer_item->iEveryHour, 
                                              timer_item->iEveryMinute, 
                                              timer_item->fEverySecond)
                                 - CmcDateTimeSpan (0,    // minus the offset
                                              timer_item->iOffsetHour, 
                                              timer_item->iOffsetMinute, 
                                              timer_item->fOffsetSecond);

  } // end of CMUSHclientDoc::ResetOneTimer
コード例 #2
0
CmcDateTime CmcDateTime::GetTimeNow ()
  {
static bool bFirstTime = true;

static CmcDateTime last_date;
static LARGE_INTEGER last_time;
static LONGLONG iCounterFrequency = 0;

  if (bFirstTime)
    {
    bFirstTime = false;
    LARGE_INTEGER large_int_frequency;
    if (QueryPerformanceFrequency (&large_int_frequency))
      {
      iCounterFrequency = large_int_frequency.QuadPart;
      QueryPerformanceCounter (&last_time);
      }
    }

  double secs = 0;
  LARGE_INTEGER time_now;

  if (iCounterFrequency)
    {
    QueryPerformanceCounter (&time_now);

    LONGLONG offset = time_now.QuadPart - last_time.QuadPart;
    secs = (double) offset / (double) iCounterFrequency;
//    TRACE ("Secs = %10.4f\n", secs);
    }
  else
    {
    time_now.QuadPart = 0;
    time_now.QuadPart = 0;
    }


  // if no high-performance counter, just query the time each time
  if (iCounterFrequency == 0 || 
      last_date.m_dt == 0 ||
      secs > RESYNC_EVERY_SECS)
    {
    SYSTEMTIME systime;
    GetLocalTime (&systime);
 	  last_date = CmcDateTime(systime.wYear, systime.wMonth,
		                  systime.wDay, systime.wHour, systime.wMinute,
		                  (double) systime.wSecond + ( (double) systime.wMilliseconds / 1000.0) );
    secs = 0;
    last_time = time_now;
    }

  CmcDateTime this_date (last_date);

  this_date.m_dt += secs / SECS_IN_DAY;

  // ---- debugging
#if 0
    {
    SYSTEMTIME systime;
    GetSystemTime (&systime);
 	  CmcDateTime test = CmcDateTime(systime.wYear, systime.wMonth,
		                  systime.wDay, systime.wHour, systime.wMinute,
		                  (double) systime.wSecond + ( (double) systime.wMilliseconds / 1000.0) );
    double diff = test.m_dt - this_date.m_dt;

    TRACE1 ("Time difference = %10.8f\n", diff);
    }

#endif
  // --- end debugging

  return this_date; 

  }
コード例 #3
0
VARIANT CMUSHclientDoc::GetTimerInfo(LPCTSTR TimerName, short InfoType)
{
    CString strTimerName = TimerName;
    CTimer * timer_item;

    VARIANT vaResult;
    VariantInit(&vaResult);

    vaResult.vt = VT_NULL;

    // trim spaces from name, make lower-case
    CheckObjectName (strTimerName, false);

    vaResult.vt = VT_EMPTY;

    // see if timer exists, if not return EMPTY
    if (!GetTimerMap ().Lookup (strTimerName, timer_item))
        return vaResult;

    switch (InfoType)
    {
    case   1:
        if (timer_item->iType == CTimer::eAtTime)
            SetUpVariantShort  (vaResult, timer_item->iAtHour);
        else
            SetUpVariantShort  (vaResult, timer_item->iEveryHour);
        break;
    case   2:
        if (timer_item->iType == CTimer::eAtTime)
            SetUpVariantShort  (vaResult, timer_item->iAtMinute);
        else
            SetUpVariantShort  (vaResult, timer_item->iEveryMinute);
        break;
    case   3:
        if (timer_item->iType == CTimer::eAtTime)
            SetUpVariantDouble  (vaResult, timer_item->fAtSecond);
        else
            SetUpVariantDouble  (vaResult, timer_item->fEverySecond);
        break;
    case   4:
        SetUpVariantString (vaResult, timer_item->strContents);
        break;
    case   5:
        SetUpVariantString (vaResult, timer_item->strProcedure);
        break;
    case   6:
        SetUpVariantBool   (vaResult, timer_item->bEnabled);
        break;
    case   7:
        SetUpVariantBool   (vaResult, timer_item->bOneShot);
        break;
    case   8:
        SetUpVariantBool   (vaResult, timer_item->iType == CTimer::eAtTime);
        break;
    case   9:
        SetUpVariantLong   (vaResult, timer_item->nInvocationCount);
        break;
    case  10:
        SetUpVariantLong   (vaResult, timer_item->nMatched);
        break;
    case  11:
        if (timer_item->tWhenFired.GetTime ())     // only if non-zero, otherwise return empty
            SetUpVariantDate   (vaResult, COleDateTime (timer_item->tWhenFired.GetTime ()));
        break;
    case  12:
        if (timer_item->tFireTime.GetTime ())     // only if non-zero, otherwise return empty
            SetUpVariantDate   (vaResult, COleDateTime (timer_item->tFireTime.GetTime ()));
        break;
    case  13:
    {
        CmcDateTime tDue = CmcDateTime (timer_item->tFireTime.GetTime ());
        CmcDateTime tNow = CmcDateTime::GetTimeNow ();
        if (tDue < tNow)
            SetUpVariantDouble   (vaResult, 0);  // due immediately
        else
        {
            CmcDateTimeSpan ts = tDue - tNow;
            SetUpVariantDouble   (vaResult, ts.GetTotalSeconds ());  // how many seconds to go
        }
    }
    break;
    case  14:
        SetUpVariantBool   (vaResult, timer_item->bTemporary);
        break;
    case  15:
        SetUpVariantBool   (vaResult, timer_item->iSendTo == eSendToSpeedwalk);
        break;
    case  16:
        SetUpVariantBool   (vaResult, timer_item->iSendTo == eSendToOutput);
        break;
    case  17:
        SetUpVariantBool   (vaResult, timer_item->bActiveWhenClosed);
        break;
    case  18:
        SetUpVariantBool   (vaResult, timer_item->bIncluded);
        break;
    case  19:
        SetUpVariantString (vaResult, timer_item->strGroup);
        break;
    case  20:
        SetUpVariantLong   (vaResult, timer_item->iSendTo);
        break;
    case  21:
        SetUpVariantLong   (vaResult, timer_item->iUserOption);
        break;
    case  22:
        SetUpVariantString (vaResult, timer_item->strLabel);
        break;
    case  23:
        SetUpVariantBool   (vaResult, timer_item->bOmitFromOutput);
        break;
    case  24:
        SetUpVariantBool   (vaResult, timer_item->bOmitFromLog);
        break;
    case  25:
        SetUpVariantBool   (vaResult, timer_item->bExecutingScript);
        break;
    case  26:
        SetUpVariantBool   (vaResult, timer_item->dispid != DISPID_UNKNOWN);
        break;

    default:
        vaResult.vt = VT_NULL;
        break;

    } // end of switch

    return vaResult;
}     // end of CMUSHclientDoc::GetTimerInfo