将毫秒转换为timespec - GNU Porting

Par*_*ani 8 c linux datetime gnu timespec

我想将毫秒转换为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;
  }
Run Code Online (Sandbox Code Playgroud)

运行此代码会给我以下错误.

在'GetTimeSpecValue'之前预期'=',',',';','asm'或'__attribute__'

我还在代码中包含了time.h文件.

小智 11

timespec结构以两个部分表示时间 - 秒和纳秒.因此,从毫秒转换的算法非常简单.一秒有千毫秒,一毫秒有一千微秒,一微秒有一千纳秒,为此我们感谢SI.因此,我们首先需要将毫秒除以千来获得几秒钟.比方说,例如,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中的函数返回`struct`).

好的,说够了.下面是一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.祝好运!