关于时间戳,想得到独一无二的时间戳
我现在通过SOCKET进行通信,消息结构体中有个字段名为time_t time;通过time.h头文件中的 time方法给值,但是我突然在CONSOLE下
进行如下测试:
time_t t1,t2;
time(&t1);
time(&t2);
发现获得的t1和t2的值一样,也就是说当我连续发送消息的时候,可能产生的时间戳是一样的,而我 本希望时间戳作为一个独一无二的标志,来区分我发的哪条消息。
愿望成空了,如果 哪位 大哥大姐 大叔大婶 有更好的方法,请告知:
感谢涕零。
[解决办法]
使用gettimeofday吧,到微秒级的
不过时间戳非时间,理论上总会有可能会重
[解决办法]
呵呵你同时进行两次时间戳的读取怎么行呢?
time返回的是秒,一秒中进行1000w次的time都可以
因此你得到两个一样的time是正常的,你两次中间可以休息一下如下:
- C/C++ code
#include <stdio.h> #include <time.h>#include "windows.h"int main(int argc,char *argv[]) { time_t time1 = time(NULL); printf("%d\n", time1); Sleep(5000); //休息5秒 time1 = time(NULL); printf("%d\n", time1);}
[解决办法]
不要用时间,用个统一id,每发一个包就加1
tcp即如此
[解决办法]
windows平台,试试用QueryPerformanceCounter,系统的ticks应该是不停变化的
[解决办法]
[解决办法]
用秒时间加秒内包计数就可以了,不要依赖系统时间,因为有任务调度延迟。另外,时间秒unix原来的定义是从1970年1月1日0时开始的总秒数,一个unsigned long型
[解决办法]
WinPcap的驱动就是用QueryPerformanceFrequency和QueryPerformanceCounter(当然是内好模式对应的API:KeQueryPerformanceCounter)来给每个packet打时间戳的。
至于Linux上如何实现,LZ可以参考一下lipcap的实现
[解决办法]
用自己的id变量比较好
[解决办法]
Sleep()的时间精度是大于30毫秒的
也就是说设置的低了未必能达到30以下的值
你所谓的t1 t2的值一样,我估计你是这么做的吧
for(int i = 0 ;i<200;i++)
{
int t1,t2;
t1=GetTickCount();
Sleep(1);
t2=GetTickCount();
//Sleep(1);
//if(t1 == t2)
TRACE("t1 = %d t2 = %d\n",t1,t2);
}
你把第二个sleep 加上就不会有t1,t2相同了
[解决办法]