C 以毫秒为精度的时间戳
我对C编程比较陌生,我正在做一个需要非常精确的时间的项目;因此,我试图写一些东西来创建毫秒精度的时间戳 这似乎有效,但我的问题是,这是正确的方法,还是有更简单的方法?这是我的密码:C 以毫秒为精度的时间戳,c,windows,datetime,time.h,C,Windows,Datetime,Time.h,我对C编程比较陌生,我正在做一个需要非常精确的时间的项目;因此,我试图写一些东西来创建毫秒精度的时间戳 这似乎有效,但我的问题是,这是正确的方法,还是有更简单的方法?这是我的密码: #include<stdio.h> #include<time.h> void wait(int milliseconds) { clock_t start = clock(); while(1) if(clock() - start >= milliseconds)
#include<stdio.h>
#include<time.h>
void wait(int milliseconds)
{
clock_t start = clock();
while(1) if(clock() - start >= milliseconds) break;
}
int main()
{
time_t now;
clock_t milli;
int waitMillSec = 2800, seconds, milliseconds = 0;
struct tm * ptm;
now = time(NULL);
ptm = gmtime ( &now );
printf("time before: %d:%d:%d:%d\n",ptm->tm_hour,ptm->tm_min,ptm->tm_sec, milliseconds );
/* wait until next full second */
while(now == time(NULL));
milli = clock();
/* DO SOMETHING HERE */
/* for testing wait a user define period */
wait(waitMillSec);
milli = clock() - milli;
/*create timestamp with milliseconds precision */
seconds = milli/CLOCKS_PER_SEC;
milliseconds = milli%CLOCKS_PER_SEC;
now = now + seconds;
ptm = gmtime( &now );
printf("time after: %d:%d:%d:%d\n",ptm->tm_hour,ptm->tm_min,ptm->tm_sec, milliseconds );
return 0;
}
#包括
#包括
无效等待(整数毫秒)
{
时钟启动=时钟();
而(1)如果(时钟()-开始>=毫秒)中断;
}
int main()
{
现在是时候了;
时钟毫安;
int waitMillSec=2800,秒,毫秒=0;
struct tm*ptm;
现在=时间(空);
ptm=gmtime(&now);
printf(“之前的时间:%d:%d:%d:%d\n”,ptm->tm_小时,ptm->tm_分钟,ptm->tm_秒,毫秒);
/*等到下一整秒*/
while(now==时间(NULL));
毫=时钟();
/*在这里做点什么*/
/*对于测试,请等待用户定义的时间段*/
等待(等待秒);
毫秒=时钟()-毫秒;
/*创建毫秒精度的时间戳*/
秒=毫秒/时钟/秒;
毫秒=毫秒每秒时钟数百分比;
现在=现在+秒;
ptm=gmtime(&now);
printf(“之后的时间:%d:%d:%d:%d\n”,ptm->tm_小时,ptm->tm_分钟,ptm->tm_秒,毫秒);
返回0;
}
时钟周期根本不能保证以毫秒为单位。您需要将clock()的输出显式转换为毫秒
t1 = clock();
// do something
t2 = clock();
long millis = (t2 - t1) * (1000.0 / CLOCKS_PER_SEC);
既然您使用的是Windows,为什么不直接使用?以下代码似乎可以提供毫秒级的粒度:
#include <windows.h>
#include <stdio.h>
int main(void) {
SYSTEMTIME t;
GetSystemTime(&t); // or GetLocalTime(&t)
printf("The system time is: %02d:%02d:%02d.%03d\n",
t.wHour, t.wMinute, t.wSecond, t.wMilliseconds);
return 0;
}
#包括
#包括
内部主(空){
系统时间t;
GetSystemTime(&t);//或GetLocalTime(&t)
printf(“系统时间为:%02d:%02d:%02d.%03d\n”,
t、 呼,t.w分钟,t.w秒,t.w毫秒);
返回0;
}
这是基于。上面的代码片段是在Windows7上用CYGWIN测试的
对于Windows 8,有,它“以尽可能高的精度检索当前系统日期和时间(非常感谢您的快速响应。当我回到我的工作机器上时,我会试试这个。直到现在我还不敢使用任何windows标题。不幸的是,我必须使用windows xp和Visual Studio 6.0,希望这不会成为问题。@morten:msdn链接说
GetSystemTime
在windows 2000及更高版本上可用,我只有veri确认它似乎在我的XP家用SP3机器上工作。祝你好运,并告诉我们你最终做了什么。只是想说声谢谢,我刚刚实现了你的想法,一切都很好。遗憾的是,我不知道它。正如我所说,我对c编程相当陌生,我花了很长时间才想出一个等待函数:)@morten-Busy循环不必要地消耗大量CPU。Non-zero Sleep()将当前进程的时间片返回内核,以便它可以安排另一个进程运行。