LARGE_INTEGER 数据结构使用,测量Sleep精度

测试程序:

#include <stdio.h>
#include <windows.h>

LARGE_INTEGER a = {0};

void main()
{
	//赋值
	//a.QuadPart = 0x1020304050607080;
	a.QuadPart = 0x9999;

	//输出1、2、3
	printf("1. Hi= 0x%04x, LO= 0x%04x\n", a.HighPart, a.LowPart);		//
	printf("2. Hi= 0x%04x, LO= 0x%04x\n", a.u.HighPart, a.u.LowPart);	//
	printf("3. a= %016I64x\n", a.QuadPart);	//直接输出

	//换成“字节序”方式输出
	unsigned char *pBuf = (unsigned char *)&a;
	printf("4. 字节序= ");
	for(int i=0; i<8; i++)
	{
		printf("%02x ", pBuf[i]);
	}
	printf("\n");


	//赋值
	LARGE_INTEGER b = a;
	printf("5. b= %016I64x\n", b.QuadPart);	//直接输出
}


注意64位的输出格式:
%016I64x
第一个016是指的8字节输出,当最左边无数据时用00填充;后面的I64x是__int64的前缀要求格式十六进制输出。


最后输出:

1. Hi= 0x0000, LO= 0x9999
2. Hi= 0x0000, LO= 0x9999
3. a= 0000000000009999
4. 字节序= 99 99 00 00 00 00 00 00
5. b= 0000000000009999
Press any key to continue


下面再给一个测量Sleep(100)延时精度测量函数:

	LARGE_INTEGER litmp;
	LONGLONG qt1,qt2;
	double dft,dff,dfm;

	//获得时钟频率
	QueryPerformanceFrequency(&litmp);//获得时钟频率
	dff=(double)litmp.QuadPart;

	//获得初始值
	QueryPerformanceCounter(&litmp);
	qt1=litmp.QuadPart;

	//下面一些耗时的操作
	Sleep(1);

	//获得终止值
	QueryPerformanceCounter(&litmp);
	qt2=litmp.QuadPart;

	//获得对应的时间值,转到毫秒单位上
	dfm=(double)(qt2-qt1);
	dft=dfm/dff;


	printf("用时: %.3f 毫秒\n", dft*1000.0);


我的PC上测得Sleep(100) =  99.407 毫秒


继续:

INT64 lseek64( HANDLE v_fd, INT64 v_i64Pos, int v_iType )

{

      LARGE_INTEGER li;

       li.QuadPart = v_i64Pos;

      li.LowPart = SetFilePointer( (HANDLE)fd, li.LowPart, &li.HighPart, iType );

      return  li.QuadPart;

}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值