亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hr_clock.c

?? 一個OPC服務(wù)器開發(fā)的源代碼。結(jié)構(gòu)清晰
?? C
字號:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000 by Timofei Bondarenko                             *
                                                                          *
 loService timers & clocks
 **************************************************************************/

#include "loserv.h"
#include "losynch.h"
#include "util.h" /* lo_variant_to_filetime / lo_filetime_to_variant */

#ifdef __GNUC__
#define  LLINT(x)  (x##LL)
#define ULLINT(x)  (x##ULL)
#endif
#ifdef _MSC_VER
#define  LLINT(x)  (x##i64)
#define ULLINT(x)  (x##ui64) /* or i64u ...*/
#endif

#if   LO_USE_PTHREADS

#include <pthread.h>


unsigned long (*lo_millisecabs)(struct timespec *);

static unsigned long lo_millisecabs_ft(struct timespec *tn)
{
 FILETIME ft;
 ULONGLONG ll;
 GetSystemTimeAsFileTime(&ft);
 ll = ft.dwHighDateTime;
 ll = (ll << 32) + ft.dwLowDateTime;
 if (tn)
   {
    tn->tv_nsec = (long)(ll % 10000000) * 100; 
    tn->tv_sec  = (long)(ll / 10000000 - ULLINT(11644473600));
   } 
 return (unsigned long)(ll / 10000);
}

/* GetSystemTimeAsFileTime() on Win95/98 has too big granularity: 55ms.
   And it works about 300 times slower than GetTickCount().
   So we decided to use it only as timeshift for a *_timedwait() function. 
   Yes, the milliseconds returned and timespec are missynchronized, but 
   we don't carry about because the *_timedwait() will probably get the same
   timespec (due FILETIME granularity). */ 

static unsigned long lo_millisecabs_95(struct timespec *tn)
{
 unsigned long ms = GetTickCount();
 if (tn) 
   {
#if 0
    lo_millisecabs_ft(tn);
#elif 1
    FILETIME ft;
    ULONGLONG ll;
    GetSystemTimeAsFileTime(&ft);
    ll = ft.dwHighDateTime;
    ll = (ll << 32) + ft.dwLowDateTime;
    tn->tv_nsec = (long)(ll % 10000000) * 100;
    tn->tv_sec  = (long)(ll / 10000000 - ULLINT(11644473600));
#else 
    FILETIME ft;
    ULARGE_INTEGER li;
    GetSystemTimeAsFileTime(&ft);
    li.LowPart = ft.dwLowDateTime;
    li.HighPart = ft.dwHighDateTime;
    tn->tv_nsec = (long)( li.QuadPart % 10000000) * 100;
    tn->tv_sec  = (long)((li.QuadPart - ULLINT(116444736000000000))/ 10000000);
/* return (DWORD)(li.QuadPart / 10000u);*/     
#endif
   }
 return ms;
}

struct timespec *lo_absrel(struct timespec *tn, unsigned relms)
{
 ldiv_t ld;
/* struct timespec to = *tn; */
 ld = ldiv(relms, 1000);
 tn->tv_sec += ld.quot;
 ld = ldiv(ld.rem * 1000000 + tn->tv_nsec, 1000000000);
 tn->tv_sec += ld.quot;
 tn->tv_nsec = ld.rem;
#if 0
 UL_DEBUG((LOGID, "ABSREL: %03u.%07u + %u.%03u = %03u.%07u",
   to.tv_sec % 1000, to.tv_nsec / 100, 
   relms / 1000, relms % 1000,
   tn->tv_sec % 1000, tn->tv_nsec / 100));
#endif
 return tn;
}
#endif /*LO_USE_PTHREADS*/

void ld_current_time(const loCaller *cactx, FILETIME *ft)
{
 GetSystemTimeAsFileTime(ft);
}

loMilliSec    lo_timegran_ms;
unsigned long lo_timegran_100ns;
#if    LO_TIMEBACK  && LO_USE_PTHREADS
int lo_NO_TIMEBACK;
#endif

#if   LO_USE_HRCLOCK

DWORD (WINAPI *lo_millisec_clock)(void);

static ULONGLONG lo_hr_frequency;

static DWORD WINAPI lo_hr_millisec_clock(void)
{
 LARGE_INTEGER tq;
 QueryPerformanceCounter(&tq);
 return (DWORD)((ULONGLONG)tq.QuadPart / lo_hr_frequency);
}

#endif /* LO_USE_HRCLOCK */

void lo_setup_clock(void)
{
 static LONG init, initialized;

 if (0 != InterlockedExchange(&init, 1))
   {
    while(0 == initialized) Sleep(0);
    return;
   }

#if  LO_USE_HRCLOCK
 {
  LARGE_INTEGER freq;
  if (QueryPerformanceFrequency(&freq))
    {
     lo_hr_frequency = (freq.QuadPart + 500) / 1000;
     if (lo_hr_frequency <= 0x10000L) /* ~ 66 MHz */
       {
        /* It seems to be not a rdtsc/rpcc */
        lo_millisec_clock = GetTickCount;
       }
     else lo_millisec_clock = lo_hr_millisec_clock;
    }
  else lo_millisec_clock = GetTickCount;
  UL_INFO((LOGID, "HiRes timer has been %s (%ld.%03u MHz)",
      lo_millisec_clock == lo_hr_millisec_clock? "INITIALIZED": "REFUSED",
      (long)(lo_hr_frequency/1000), (int)(lo_hr_frequency%1000)));
 }
#endif /*LO_USE_HRCLOCK*/
 {
  DWORD ta, ti = 0;
  BOOL tb;
  if (GetSystemTimeAdjustment(&ta, &ti, &tb))
    {
     if (ti && ti < 100*10000)
       {
        UL_INFO((LOGID, "Timer granularity determined %u.%04ums; use: %ums", 
          ti / 10000, ti % 10000, (ti + 5000) / 10000));        
       }
     else /* WinE may report 0 */
       {        
        UL_INFO((LOGID, "Timer granularity is suspicious %u.%04ums: Assume 20ms", 
          ti / 10000, ti % 10000));        
        ti = 20 * 10000;
       }
     lo_timegran_100ns = ti;
     if (0 == (ti = (ti + 5000) / 10000)) ti = 1;
     lo_timegran_ms = ti;
#if     LO_USE_PTHREADS
     lo_millisecabs = lo_millisecabs_ft;
#endif
    }
  else /* Win95/98 do not support GetSystemTimeAdjustment(). */
    {
/* ftime() / GetSystemTime() in PTHREADS/Win95/98 have resolution 55ms
   therefore we can't use shorter sleeps safely. 
   ti = 60 * 10000; 549255;           */
     ti = 5 * 10000;
     UL_INFO((LOGID, "Timer granularity default %u.%04ums", 
              ti / 10000, ti % 10000));
     lo_timegran_100ns = ti;
     lo_timegran_ms = (ti + 5000) / 10000;
#if LO_USE_PTHREADS
     lo_millisecabs = lo_millisecabs_95;
#if LO_TIMEBACK
     lo_NO_TIMEBACK = 1;
#endif
#endif
    }
 }
 initialized = 1;
}

loMilliSec lo_default_timegran(loMilliSec *minwait)
{
 /* MSDN said about timer granularity:
    NT 3.5     16ms
    NT 4.0     10ms
    95/98      55ms

  I saw following (GetTickCount(), Sleep() and WaitFor*()):
    NT 4.0 AdvServer  15.625ms
    W2k Server        15.625ms *
    W2k Professional  10ms (10.0144ms) *
    Win95             13.73ms (54.9255ms**)
    Win98             5ms     (54.9255ms**)
    WinE/Linux        1ms     (10ms+10ms***)
  * - under W2k the granularity of Sleep()/WaitFor*() might drop to ~1ms 
      when an specefic application running.
  ** - For SystemTime/FILETIME.
  *** - Under WinE Wait*() have granularity 10ms and usally by 10ms 
        longer than requested (that's better than _shorter_ under W2k).

  Thus I use this _BOGUS_ code just for getting *default* granularity
 */
 if (minwait) 
   {
    *minwait = lo_timegran_ms < 10? 15: lo_timegran_ms;
   }
 return lo_timegran_ms;
#if 0
 {
  DWORD ti = 0;
  HANDLE ev;
  ev = CreateEvent(NULL, FALSE, FALSE, NULL);
  if (ev)
    {
     if (WAIT_TIMEOUT == WaitForSingleObject(ev, 1))
       {
        lo_millisec();
        WaitForSingleObject(ev, 1);
        ti = lo_millisec();
        WaitForSingleObject(ev, 1);
        ti = lo_millisec() - ti;
       }
     CloseHandle(ev);
     if (ti)
       {
        UL_INFO((LOGID, "Timer granularity determined is %dmS", ti));
        if (ti >= 10 && ti <= 100)
          {
           if (0 == timegran)
             InterlockedExchange(&timegran, ti);
           return ti;
          }
       }
    }
 }
#endif
#if 0
 {
  DWORD ti = 0;
  OSVERSIONINFO osvi;
  memset(&osvi, 0, sizeof(osvi));
  osvi.dwOSVersionInfoSize = sizeof(osvi);
  if (GetVersionEx(&osvi))
    {
     if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
       {
        ti = 25/*16*/;
        if (osvi.dwMajorVersion > 4) ti = 20/*10*/;
       }
     else ti = 50/*55*/;
     if (0 == timegran)
       {
        InterlockedExchange(&timegran, ti);
        UL_INFO((LOGID, "Timer granularity for the system is %dmS", ti));
       }
     return ti;
    }
 }
#endif
/* UL_NOTICE((LOGID, "Timer granularity default is %dmS", 25));
 return 25;
*/
}


/* Anyway this is more accurate than SystemTimeToVariantTime(); */

double lo_filetime_to_variant(const FILETIME *ft)
{
#if 0
 /* 109205 * 3600 * 24 == 9435312000 */
 int frac;
 LONGLONG ll = ft->dwHighDateTime;
 ll = (ll << 32) + ft->dwLowDateTime;
 ll -= LLINT(94353120000000000);
#if 0
 return (double)(ll / (24. * 3600. * 1e7));
#else
 frac = (int)(ll % 1000000000L);
 return (ll / 1000000000L + frac / 1e9) / (24. * 36.);
#endif
#elif 0
 /* 2 ^^ 32 == 4294967296
    109205 * 3600 * 24 * 1e7 / 4294967296 == 21968297
    109205 * 3600 * 24 * 1e7 % 4294967296 == 2836185088
 */
 return (-2836185088.
         +(ft->dwHighDateTime - 21968297.) * 4294967296.
         + ft->dwLowDateTime) / (24. * 3600. * 1e7);
#else
 return (-109205. * (24. * 3600. * 1e7)
         + ft->dwHighDateTime * 4294967296.
         + ft->dwLowDateTime) / (24. * 3600. * 1e7);
#endif
}

void lo_variant_to_filetime(FILETIME *ft, double vd)
{
 LONGLONG ll;
 ll = (LONGLONG)(vd * 24. * 3600. * 1e7 /*+0.5*/);
 ll += LLINT(94353120000000000);
 ft->dwLowDateTime = (DWORD)ll;
 ft->dwHighDateTime = (DWORD)(ll >> 32);
}

/* end of hr_clock.c */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三| 日韩中文字幕1| www.在线成人| 中文字幕日韩av资源站| 成人高清免费在线播放| 中文字幕制服丝袜一区二区三区| 岛国一区二区三区| 亚洲乱码日产精品bd| 欧美三级欧美一级| 蜜臀av性久久久久蜜臀av麻豆| 日韩一级完整毛片| 国内久久精品视频| 国产精品美女久久久久久2018| 91麻豆产精品久久久久久| 亚洲一区自拍偷拍| 欧美一区二区久久久| 国产一区二区三区黄视频 | 欧美一区中文字幕| 精品一区二区三区免费观看 | 亚洲国产精品黑人久久久| av资源网一区| 亚洲高清视频在线| 欧美精品一区二区三区久久久| 成人av电影在线网| 午夜电影网一区| 国产区在线观看成人精品| 91尤物视频在线观看| 日本成人在线网站| 国产精品久久久久久妇女6080| 欧美日韩一卡二卡三卡 | 久久久久成人黄色影片| 91蜜桃视频在线| 免费人成在线不卡| 成人欧美一区二区三区小说| 欧美一区二区高清| 成人av资源站| 九九精品一区二区| 亚洲一区二区av在线| 久久久精品中文字幕麻豆发布| 91久久人澡人人添人人爽欧美| 另类小说综合欧美亚洲| 亚洲精品一二三| 久久综合狠狠综合久久激情| 欧美日韩性生活| 成人免费av网站| 天堂av在线一区| 亚洲色图另类专区| 久久综合九色综合久久久精品综合| 91久久精品一区二区三区| 精品一区二区三区在线观看国产| 毛片基地黄久久久久久天堂| 亚洲丝袜另类动漫二区| 欧美videofree性高清杂交| 在线观看视频一区二区欧美日韩| 国产激情视频一区二区在线观看| 亚洲va欧美va天堂v国产综合| 中文一区二区完整视频在线观看 | 免费观看在线综合| 亚洲综合一区二区精品导航| 国产日韩影视精品| 精品久久一区二区三区| 91精品在线一区二区| 色av综合在线| 99视频在线精品| 成人性生交大片免费看在线播放 | 精品影视av免费| 亚洲v精品v日韩v欧美v专区| 一区二区三区日韩精品| 国产精品不卡在线| 中日韩av电影| 国产欧美日韩另类视频免费观看| 欧美成va人片在线观看| 欧美一区二区三区免费大片 | 美女mm1313爽爽久久久蜜臀| 丝袜美腿一区二区三区| 亚洲无人区一区| 亚洲精品视频一区二区| 亚洲精品日韩综合观看成人91| 中文字幕欧美一| 亚洲国产高清在线| 中文字幕不卡三区| 国产精品系列在线| 国产精品伦理一区二区| 国产精品久久久久影院老司| 中文字幕的久久| **网站欧美大片在线观看| 亚洲少妇30p| 伊人一区二区三区| 一区二区三区在线视频免费| 亚洲国产中文字幕在线视频综合 | 日韩一级欧美一级| 日韩一区二区精品| 久久亚洲精华国产精华液| 久久久精品一品道一区| 国产精品丝袜久久久久久app| 国产精品―色哟哟| 一区二区三区在线视频免费观看| 亚洲第一成年网| 久久99国产精品久久99果冻传媒| 国产盗摄女厕一区二区三区| 99久久综合狠狠综合久久| 99re成人在线| 欧美性大战久久久久久久蜜臀| 88在线观看91蜜桃国自产| 精品免费99久久| 国产精品嫩草影院com| 一区二区三区在线播放| 日韩成人av影视| 国产成人小视频| 欧美在线观看视频一区二区| 国产欧美日韩三级| 亚洲综合色成人| 美女视频黄久久| av不卡免费电影| 555夜色666亚洲国产免| 久久精品人人爽人人爽| 亚洲一区二区免费视频| 国产综合久久久久久鬼色 | 欧美日韩一区二区三区不卡| 日韩一区二区不卡| 亚洲欧洲成人av每日更新| 偷拍一区二区三区四区| 国产精品一区二区久激情瑜伽 | 91传媒视频在线播放| 日韩欧美国产小视频| 综合久久给合久久狠狠狠97色| 日本中文字幕一区二区视频 | 蜜桃精品视频在线| 色综合天天狠狠| xnxx国产精品| 偷拍与自拍一区| gogo大胆日本视频一区| 欧美一区二区在线免费观看| 国产精品久久久久久妇女6080| 免费在线观看一区| 欧美亚洲精品一区| 国产欧美日韩另类视频免费观看 | 亚洲精品国久久99热| 国产精品一级在线| 欧美精品久久一区| 中文字幕五月欧美| 国产在线一区二区| 在线不卡的av| 亚洲日本免费电影| 国产精品91xxx| 日韩精品在线看片z| 亚洲一二三区在线观看| 成人黄色片在线观看| 精品国产精品网麻豆系列 | 日韩欧美一级二级三级 | 久国产精品韩国三级视频| 欧美私模裸体表演在线观看| |精品福利一区二区三区| 国产精品1区2区| 亚洲精品一区二区精华| 蜜臀av一区二区在线免费观看| 欧美综合一区二区三区| 亚洲图片激情小说| 波波电影院一区二区三区| 久久尤物电影视频在线观看| 麻豆中文一区二区| 欧美一级日韩免费不卡| 亚洲123区在线观看| 欧美视频日韩视频在线观看| 亚洲最新视频在线播放| 在线亚洲一区二区| 亚洲精品国产无套在线观| 99re成人精品视频| 亚洲人成7777| 99久久99久久综合| 《视频一区视频二区| 91丝袜国产在线播放| 专区另类欧美日韩| 色哟哟国产精品免费观看| 亚洲免费在线电影| 日本道精品一区二区三区| 亚洲一区免费视频| 欧美日本国产一区| 男人的天堂久久精品| 欧美精品一区二区在线播放 | 亚洲国产一区二区视频| 欧美日韩一区在线观看| 日韩av电影免费观看高清完整版在线观看 | 91精品在线麻豆| 美女视频免费一区| 久久免费偷拍视频| 粉嫩av一区二区三区| 亚洲天堂中文字幕| 欧美色视频在线| 麻豆久久一区二区| 欧美激情中文字幕| 色就色 综合激情| 手机精品视频在线观看| 精品人伦一区二区色婷婷| 国产中文一区二区三区| 国产精品久久久久久一区二区三区| 91欧美激情一区二区三区成人| 亚洲福利视频三区| 欧美mv日韩mv国产网站| 成人免费观看av|