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中显示任何值?
答案 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呼叫可能会阻塞。你可以通过注释来验证这一点,然后看到代码至少会产生输出。