将毫秒转换为timespec – GNU移植

我想把毫秒转换成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毫秒转换为秒和纳秒:

  1. 4321(毫秒)/ 1000 = 4(秒)
  2. 4321(毫秒)%1000 = 321(毫秒)
  3. 321(毫秒)* 1000000 = 321000000(纳秒)

了解了上面的内容,唯一剩下的就是写一点C代码。 有几件事情你没有得到正确的答案:

  1. 在C中,你必须使用struct来为结构数据类型加前缀。 例如,而不是说timespec你说的struct timespec 。 然而,在C ++中,你不必这样做(不幸的是,在我看来)。
  2. 你不能从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不是一个指针。 因此成员不能用' – >'来访问