仅使用ANSI C,有没有办法以毫秒或更多精度测量时间?我正在浏览time.h但我只发现了第二个精确功能.
我正在试图找出一种方法来编写一些代码,这些代码可以准确地计算出在BST上执行搜索所需的时间.目前即时使用时间和元素总数的顺序为10 ^ 5.它看起来像下面这样: -
clock_t begin, end;
begin = clock();
...
...
...
end = clock();
difference = (end-begin)/CLOCKS_PER_SECOND;
Run Code Online (Sandbox Code Playgroud)
但是,这并没有给我提供我正在寻找的精确度.我可以使用其他任何libc功能吗?
我希望能够将具有毫秒分辨率的本地时间和日期放入字符串中,如下所示:
YYYY-MM-DD hh:mm:ss.sss
这似乎是一件简单的事情,但我还没有找到一个简单的答案来解决这个问题.我用C++编写并且可以访问11个编译器,但是如果它更清晰则可以使用C解决方案.我在这里发现了一个解决方案,以毫秒为单位获取日期和时间,但是使用标准库肯定不会那么困难.我可能会继续推进这种类型的解决方案,但希望通过在SO上提出问题来增加知识库.
我知道这会起作用,但似乎又不必要地困难:
#include <sys/time.h>
#include <stdio.h>
int main(void)
{
string sTimestamp;
char acTimestamp[256];
struct timeval tv;
struct tm *tm;
gettimeofday(&tv, NULL);
tm = localtime(&tv.tv_sec);
sprintf(acTimestamp, "%04d-%02d-%02d %02d:%02d:%02d.%03d\n",
tm->tm_year + 1900,
tm->tm_mon + 1,
tm->tm_mday,
tm->tm_hour,
tm->tm_min,
tm->tm_sec,
(int) (tv.tv_usec / 1000)
);
sTimestamp = acTimestamp;
cout << sTimestamp << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
尝试用旧C语言查看C++和strftime的put_time.两者都只允许我达到我能说的最佳分辨率.你可以看到我到目前为止得到的两种方法.我想把它变成一个字符串
auto t = std::time(nullptr);
auto tm = *std::localtime(&t);
std::cout << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << std::endl;
time_t rawtime;
struct tm * timeinfo; …Run Code Online (Sandbox Code Playgroud)