C语言获取当前系统时间的几种方式
C语言获取系统时间的几种方式
C语言中如何获取时间?精度如何?
1 使用time_t time( time_t timer ) 精确到秒
2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒
3 计算时间差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精确到毫秒
5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒
6 要获取高精度时间,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER lpFrequency)
获取系统的计数器的频率
BOOL QueryPerformanceCounter(LARGE_INTEGER
lpPerformanceCount)
获取计数器的值
然后用两次计数器的差除以Frequency就得到时间。
7 Multimedia Timer Functions
The following functions are used with multimedia timers
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
用的是线程函数还是MFC中的线程类?
如果是函数,把一个long型值当线程参数传入(传其地址),然后在线程中对其赋值即可。
int main(int argc,char argv[])
{
long threadTime;
beginthreadex(,threadproc,&threadTime);
//wait for thread quit
//threadTime == 线程的运行时间
}
ulong threadproc(LPVOID param)
{
long plTime = (long)param;
plTime = GetCurrentTime();
return 0;
}
如果是一个类,就直接用类变量就可以了。
你说的是 SetTimer吧?
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
如果你在MFC中使用的话 由于已经被封装了 所以不需要制定hWnd参数了。
iIDEvent这个标志一般就是自己定义的标志,比如计算时间需要一个定时器,计算其他的东西需要定时器,也就是说需要区别不同的定时器。
nElapse就是间隔多长时间触发一次定时器。
最后一个参数就是回调函数,意思就是当定时器触发的时候需要哪个函数来处理数据,当设置为NULL的时候,就是调用ONTIME函数,你可以再MFC中重载该函数。
例如
#define UM_TIMER WM_USER+1
SetTimer(UM_TIMER,1000,NULL); //每间隔1秒触发,并且使用ONTIMER函数。
然后在
C::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == UMTIMER)
{
这个地方填写你需要处理的东西。
}
}
计算时间差使用double difftime( time_t timer1, time_t timer0 )2 使用clock_t clock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3 使用DWORD GetTickCount() 得到的是系统运行的时间 精确到毫秒4 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒5 要获取高精度时间,可以使用BOOLQueryPerformanceFrequency(LARGE_INTEGERlpFrequency)获取系统的计数器的频率BOOLQueryPerformanceCounter(LARGE_INTEGERlpPerformanceCount)获取计数器的值然后用两次计数器的差除以Frequency就得到时间。6 还有David的文章中提到的方法:MultimediaTimer FunctionsThefollowing functions are used with multimedia timerstimeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTimetimeGetTime/timeKillEvent/TimeProc/timeSetEvent精度很高Q:GetTickCount()函数,说是毫秒记数,是真的吗,还是精确到55毫秒?A:GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考QA001022"timeGetTime函数延时不准"。GetSystemTime返回的是格林威志标准时间GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间VOID GetSystemTime(LPSYSTEMTIME lpSystemTime // address of system time structure);函数就可以获得了,其中LPSYSTEMTIME 是个结构体含:年,月,日,周几,小时,分,秒,毫秒。
以上就是关于c语言有办法取得当前纳秒或微秒级的时间吗全部的内容,包括:c语言有办法取得当前纳秒或微秒级的时间吗、如何在MFC中获取某线程的运行时间急!、mfc 中Settime使用的具体步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)