// [from] uthash/tests/keystat.c void gettimeofday ( struct timeval * p , void * tz /* IGNORED */ ) LARGE_INTEGER q ; static long long freq ; static long long cyg_timer ; QueryPerformanceFrequency ( & q ) ; freq = q . QuadPart ; QueryPerformanceCounter ( & q ) ; cyg_timer = q . QuadPart ; p -> tv_sec = ( long ) ( cyg_timer / freq ) ; p -> tv_usec = ( long ) ( ( ( cyg_timer % freq ) * 1000000 ) / freq ) ;
  double deviation_sum = 0.0;
  double deviation_cnt = 0.0;
  double deviation_max = 0.0;
  struct timeval lastSent;
  struct timeval lastPrint;
  gettimeofday(&lastSent, NULL);
while(1)
  FD_SET readfd;
  struct timeval timeout;
  //...
  timeout.tv_sec = interval / 1000000;
  	timeout.tv_usec = interval % 1000000;
  	gettimeofday(&lastSent, NULL);
  	int reVal = select(num + 1, &readfd, NULL, NULL, &timeout
在调用 select () 的 timeout 会倾向于在循环外部进行赋值,以降低不必要的 CPU 消耗,关于 select () timeout 上的用法陷阱,很多资深的平台移植人员也掉进过,在 FreeRTOS 平台调用 select timeout 的值在调用前后保持不变,但任何的处理都是要花费时间的,当 select () 第一次调用完成再次进入循环体时,这个 timeout 的值已经背更新为”剩下的时间“,如 9 秒,这个时候, select () 调用的设计不再符合设计者的初衷, http://fanqiang.chinaunix.net/a4/b7/20010913/0900001283.html【 原文由 cpu 所发表 】  用过 WinSock API 网友们知道:WinSock 编程中有一很方便的地方便是其 息驱动机制,不管是底层 API 的 WSAAsync Select () 还是 MFC 的异步Socket类: CAsyncSocket,都提供了诸如 FD_AC  在完善我的跨平台的发邮件类库时, select 做延时 windows 没效果,Linux正常,还以为我代码写错了呢;在网上搜素下也没发现类似说法,于是我就写了段小测了,果然 select 延时在 windows 上缩水了 #include iostream>#include time.h>#ifdef WIN32#include winsock2.h>#pragma comment(lib,"ws2_ 于是用以下方法测试: 用waitforsingleobjec  sleept,  gettickout QueryPerformanceFrequency、QueryPerformanceCounter来对比, 试了n次后发现, windows 系统(至少我的电脑上),不管用sleep还是waitforsingleobjec Windows 定时精度比较 方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,可以实现一定的定时功能,但其定时功能如同Slee