等效系统时钟毫秒,单位为c++;还有C#? < >我将数据从C++ +dll传递到C应用程序,使用 dLimPult <
我想做的是计时数据传输时间。因此,我想在dll函数中获取系统时间(以毫秒为单位),然后在C#端再次执行相同的操作,并获取两者之间的差值以计算所花费的时间 <>在C++端,我发送了一个<>代码>长/代码>,我得到的是这样的:等效系统时钟毫秒,单位为c++;还有C#? < >我将数据从C++ +dll传递到C应用程序,使用 dLimPult < ,c#,c++,boost,C#,C++,Boost,我想做的是计时数据传输时间。因此,我想在dll函数中获取系统时间(以毫秒为单位),然后在C#端再次执行相同的操作,并获取两者之间的差值以计算所花费的时间 在C++端,我发送了一个代码>长/代码>,我得到的是这样的: boost::posix_time::ptime current_date_microseconds = boost::posix_time::microsec_clock::local_time(); long millisecondStamp2 = current_date_mi
boost::posix_time::ptime current_date_microseconds = boost::posix_time::microsec_clock::local_time();
long millisecondStamp2 = current_date_microseconds.time_of_day().total_milliseconds();
63705280140098 //c#
54540098 //c++
63705225600000 // elapsed
我将long
作为名为timestamp
的变量发送到C,然后运行:
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
long elapsed = milliseconds - timestamp;
当我打印值时,它们如下所示:
boost::posix_time::ptime current_date_microseconds = boost::posix_time::microsec_clock::local_time();
long millisecondStamp2 = current_date_microseconds.time_of_day().total_milliseconds();
63705280140098 //c#
54540098 //c++
63705225600000 // elapsed
为什么C++的值和C的值如此不同?
如何以这种方式从系统时钟中获取等效值?请忽略该评论不正确。该属性返回一个刻度计数,其单位为“一千万分之一秒”,并从“公历0001年1月1日0:00:00 UTC”开始测量此类刻度的数量。它是一个直整数值,所有位根据其在值中的重要性对总值的贡献相等
现在,只要你的结果不一致
< C++表达式>代码> CurrnDyDATE微秒。即,这是自午夜以来的总毫秒数(根据该值,您似乎在当地时间下午3点左右执行了代码)
另一方面,使用DateTime.Now
的.NET表达式测量的是从纪元开始的毫秒数,即从0001年1月1日开始的毫秒数
这两个值根本不具有可比性。它们代表两个完全不同的时间段
理论上,您可以通过在.NET端使用DateTime.Now.TimeOfDay.totalmillizes来解决此问题。这将使您更接近您期望的价值
然而
我不清楚,你所使用的C++ POSIX API是否会完全使用与.NET API相同的时钟引用。此外,即使是这样,API本身也存在一些开销,以及线程调度扰动,这些扰动可能会在计算中引入错误
<> P>我觉得在.NET上使用一个更好的方法来使用“代码>系统.MyTrask.St秒表类来测量调用到C++ DLL中的全部时间,然后在C++ DLL中,使用PosixAPI来测量C++代码执行的时间并将其传递回C端。那么C的边可以从它自己的时间中减去C++时间,以大致决定调用的总开销。(当然,确保每个值使用完全相同的单位…例如毫秒。)
即便如此,重要的是要记住:-
< LI>如果在同一调用中返回C++时间值,则In及其本身可能影响调用的总开销。
- 一些明显的开销可能是线程调度的影响。也就是说,如果您的线程在调用过程中被抢占,那么您的部分度量将是线程被抢占的时间
- 至少在.NET方面,也可能在C++方面,对时序的精度还有限制。
类肯定比Stopwatch
更精确、更可取,但是如果开销足够小,您可能无法获得有用的结果(当然,如果它那么小,那么可能足以发现它太小而无法获得有用的结果:)DateTime
DateTime。现在
速度相当慢,不建议用于benchamark场景。使用<代码> Stase.StutysType,StutpWistB/Cord>来测量C端的调用时间,以及Boost等价物,以测量C++端的执行时间,可能会得到更好的结果。在c#中,刻度分为两部分:1)低位40位,表示一天中时间的100ns数;2)高位24位表示从1/1/01开始的天数。看起来像C++,你只有时间而不是日期。So long date=DateTime.Now.Ticks;长毫秒=日期/10000;嗨,谢谢你回复我。这种方法打印的值与我的值完全相同<代码>长日期=DateTime.Now.Ticks;长毫秒=日期/10000;长毫秒2=DateTime.Now.Ticks/TimeSpan.tickspermillsecond代码>毫秒
和毫秒2
是相同的。