fatal error C1083 无法打开包括文件 “sys/time.h” No such file or directory

通常在跨平台编程的时候会遇到这个问题。sys/time.h是linux目录下的文件,里面有gettimeofday这种函数。这个问题,可以转化为,如果要在windows下实现任务计时间的功能,该如何做?根据精度要求可选择以下两种方式。

精度要求不高(毫秒级)

头文件:windows.h

函数声明:DWORD WINAPI GetTickCount(void)

其中DWORD的类型为无符号长整型,声明如下:

typedef unsigned long DWORD;

功能:返回自设备启动后的毫秒数

用法演示

DWORD start,end;

start = GetTickCount();//vs2019会建议采用GetTickCount64()函数

// compute task

end = GetTickCount();//同上

printf("elapse time = %f\n",1.0*(end-start);

-----------------------------
输出:
elapse time = 3016.000000ms

精度要求高(微秒级)

头文件:windows.h

函数声明:BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)

​ BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)

其中LARGE_INTEGER 的类型声明如下:

typedef union_LARGE_INTEGER
{
    struct
    {
        DWORD LowPart;
        LONG HightPart;
    };
    LONG LONG QuadPart;
}LARGE_INTEGER;

功能:第一个函数获得的是CPU从开机依赖执行的时钟周期数,第二个函数用于获取电脑的时钟周期。

用法演示

LARGE_INTEGER nun;
long long start,end,freq;
QueryPerformanceFrequency(&num);
freq = num.QuadPart;
QueryPerformanceCounter(&num);
start = num.QuadPart;
// coumpute task
QueryPerformanceCounter(&num);
end = num.QuadPart;
printf("elapse time = %f\n",(end-start)*1000.0/freq);
-----------------------------
输出:
elapse time = 3009.578000ms

总结

附上完整演示版本:

#include <iostream>
#include <windows.h>

void AComputeTask()
{
	Sleep(3000);
	int c = 1 + 2;
}

int main()
{
#if 0
	DWORD start, end;
	start = GetTickCount64();
	AComputeTask();
	end = GetTickCount64();
	printf("elapse time = %fms\n", 1.0*(end - start));
#else
	LARGE_INTEGER num;
	long long start, end, freq;
	QueryPerformanceFrequency(&num);
	freq = num.QuadPart;
	QueryPerformanceCounter(&num);
	start = num.QuadPart;
	AComputeTask();
	QueryPerformanceCounter(&num);
	end = num.QuadPart;
	printf("elapse time = %fms\n", (end - start) * 1000.0 / freq);
#endif
	return 0;
}

对比两个版本,可以查看第二个版本可以精确到微秒。如果对精确度没有要求,可以任意选择一种计时方式,替代linux下的sys/time.h中的方法。

本文参考博文https://blog.csdn.net/fz_ywj/article/details/8109368,修改了部分代码,对原作者表示感谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值