#include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") #include "mmsystem.h" #pragma comment(lib, "Winmm.lib") /* 函数功能: 测试select,WaitForSingleObject, Sleep函数的时间精度, 以及对CPU的占用率情况, 多媒体计时函数timeBeginPeriod对上述函数的影响; 测试时间: 2011年01月13日 测试结果: 1.定时器精度必须设置, 否则使用的是系统默认精度15ms左右; 也就是说必须调用timeBeginPeriod并指定为1ms; 2.无论定时器精度是否设置, 调用两次GetTickCount函数获取的差值都不准确; 3.定时器精度设置为1ms后, select, sleep, timeGetTime, WaitForSingleObject这些依赖于定时器的函数都将变得精确; 4.死循环调用 sleep(1ms超时) 或 select(1ms超时) 不造成明显的CPU占用, 测试前提,已经设置了定时器精度为1ms; */ // Test "select" 1ms void TestTime1() { SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); struct sockaddr_in serv; memset(&serv, 0, sizeof(struct sockaddr_in)); serv.sin_family = AF_INET; serv.sin_addr.s_addr = inet_addr("192.168.3.103"); serv.sin_port = htons(554); timeBegin