Le 11/06/13 14:22, Kelly, Dan a écrit :

I have been having some difficulty initializing a chrono::system_clock::time_point object.  Specifically,

I am trying to load a time stamp from a .pcap file using libpcap.  I have a structure, pcap_pkthdr,

which contains two fields:

 

struct timeval {

        long    tv_sec;         /* seconds */

        long    tv_usec;        /* and microseconds */

};

 

struct pcap_pkthdr {

       struct timeval ts;   /* time stamp */

       bpf_u_int32 caplen;  /* length of portion present */

       bpf_u_int32 len;     /* length this packet (off wire) */

};

 

Where tv_sec and tv_usec are seconds and microseconds respectively relative to an epoch

of Jan 1, 1970.  I can use system_clock::from_time_t() to initialize the time_point to an 64-bit integer

seconds (std:time_t).  The question is, how do I add the microseconds to this value?  My latest attempt

is:

 

void my_class::calculate_packet_statistics( const struct pcap_pkthdr *header ) {

   frame_interval_.intervalTimeStamp_ = system_clock::from_time_t( static_cast<time_t>( header->ts.tv_sec ) );

   frame_interval_.intervalTimeStamp_ += microseconds( header->ts.tv_usec ); // This is the problematic line

}

 

However, this appears to simply add tv_usec to the internal representation of the time_point.  The internal

representation appears to be in 100ns ticks with an epoch other than Jan 1, 1970. This is on a windows x64

build but the same code will have to work on Linux as well.

 

As a side note, I later do some date calculations using system_clock::to_time_t.  I lose my fractional seconds here

But since I am only working with dates, this is not a problem.

 


Hi, there were some issues  (https://svn.boost.org/trac/boost/ticket/7525) with windows system_clock epoch that should be fixed with https://svn.boost.org/trac/boost/changeset/82563. This was released on Boost 1.52.

Which version are you using?

Best,
Vicente