我想把毫秒转换成GNU(GCC)linux的timespec结构。 我已经尝试过下面的代码。
timespec GetTimeSpecValue(unsigned long milisec) { struct timespec req; //long sec = (milisecondtime /1000); time_t sec = (time_t)(milisec/1000); req->tv_sec = sec; req->tv_nsec = 0; return req; }
运行这个代码给我下面的错误。
在'GetTimeSpecValue'之前预期'=',',',';','asm'或'__attribute__'
我也在代码中包含time.h文件。
timespec
结构表示时间timespec
– 秒和纳秒。 因此,从毫秒转换的算法相当简单。 一秒有一千毫秒,一毫秒有一千微秒,一微秒有一千纳秒,对此我们非常感谢。 因此,我们首先需要以毫秒为单位来划分秒数。 比如说,1500毫秒/ 1000 = 1.5秒。 给定整数算术(不是一个浮点数),其余的被删除(即1500/1000等于1,而不是1.5)。 然后我们需要取一个毫秒数的余数,肯定小于一秒,然后乘以一百万,将其转换为纳秒。 为了得到除以1000的余数,我们使用模块运算符( %
) (即1500 % 1000 is equal to 500
)。 例如,我们将4321毫秒转换为秒和纳秒:
了解了上面的内容,唯一剩下的就是写一点C代码。 有几件事情你没有得到正确的答案:
struct
来为结构数据类型加前缀。 例如,而不是说timespec
你说的struct timespec
。 然而,在C ++中,你不必这样做(不幸的是,在我看来)。 好,说够了。 下面是一个简单的C代码示例:
#include <time.h> #include <stdlib.h> #include <stdio.h> static void ms2ts(struct timespec *ts, unsigned long ms) { ts->tv_sec = ms / 1000; ts->tv_nsec = (ms % 1000) * 1000000; } static void print_ts(unsigned long ms) { struct timespec ts; ms2ts(&ts, ms); printf("%lu milliseconds is %ld seconds and %ld nanoseconds.\n", ms, ts.tv_sec, ts.tv_nsec); } int main() { print_ts(1000); print_ts(2500); print_ts(4321); return EXIT_SUCCESS; }
希望能帮助到你。 祝你好运!
尝试这个:
struct timespec GetTimeSpecValue(unsigned long millisec) { struct timespec req; req.tv_sec= (time_t)(millisec/1000); req.tv_nsec = (millisec % 1000) * 1000000; return req; }
我不认为结构timespec是typedef'ed,因此你需要prepend与结构的timespec。 如果你想要精确的话,计算一下纳秒。 请注意,req不是一个指针。 因此成员不能用' – >'来访问