c时间戳的下面代码中的错误是什么?

时间:2014-05-22 08:26:02

标签: c linux timestamp clock qnx

double GetTimeStamp()
{
    struct timespec start;

    if((clock_gettime( CLOCK_MONOTONIC, &start)) == -1 )
    {
        perror("clock gettime\n");
    }

    return start.tv_sec + start.tv_nsec * 1e-9;   //seconds
}

MAIN.c

uint64_t Receive;
uint32 receiveTime;
int main()
{
    rc=recvfrom(sock, buf, 256, 0, (struct sockaddr*) &client, &len);
    Receive = GetTimeStamp();
    receiveTime = (uint32) (Receive / 1000000);    // I am converting to microseconds
    printf("Receive time: %lu\n", receiveTime);
}

我正在采取时间戳并从另一个程序中读取该时间,如上所示。但如果我这样做,我没有任何价值。为什么它没有在main中显示任何值?

1 个答案:

答案 0 :(得分:1)

通过

I am not getting any value if I do as above. Why is it not displaying any value in main?

你的意思是显示0,或者什么都没有显示?

假设前者,CLOCK_MONOTONIC默认在启动时(Starting point for CLOCK_MONOTONIC)开始,因此它测量系统的运行时间。现在你的GetTimeStamp代码返回自启动时间以来的秒数,然后用不正确的注释将其除以1,000,000"我转换为微秒"。实际上,您将启动后的秒数除以100万,因此除非您的系统已超过1,000,000秒,否则这可能会返回0。那将是11天以上。因此,如果您的系统启动的时间少于此时间,那么您可能希望将输出视为0。

假设后者,您的recvfrom呼叫可能会阻塞。你可以通过注释来验证这一点,然后看到代码至少会产生输出。