首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于时间戳,想得到绝无仅有的时间戳

2012-07-30 
关于时间戳,想得到独一无二的时间戳我现在通过SOCKET进行通信,消息结构体中有个字段名为time_ttime通过ti

关于时间戳,想得到独一无二的时间戳
我现在通过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应该是不停变化的
[解决办法]
探讨
终于明白原来TIME取的是秒级别的,各位有读取微秒级别的函数吗?据说gettimeofday可以 我去看下。
建立一个整型加1的方法,这个方法是我们最后考虑使用的方法,老大说看能不能找到读出微秒的方法,不过我现在觉得微秒也不够啊,现在执行一条语令估计到纳秒及别了吧,连续发送两个消息,估计用微秒也区分不出了

[解决办法]
用秒时间加秒内包计数就可以了,不要依赖系统时间,因为有任务调度延迟。另外,时间秒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相同了
[解决办法]
探讨
不要用时间,用个统一id,每发一个包就加1
tcp即如此

热点排行