第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C++ 和 C# 中的等效系統(tǒng)時(shí)鐘毫秒?

C++ 和 C# 中的等效系統(tǒng)時(shí)鐘毫秒?

PHP
哆啦的時(shí)光機(jī) 2024-01-20 15:58:48
我正在使用 .dll 將數(shù)據(jù)從 c++ .dll 傳遞到 C# 應(yīng)用程序DllImport。我想做的是計(jì)算數(shù)據(jù)傳輸時(shí)間。所以我想在dll函數(shù)中獲取以毫秒為單位的系統(tǒng)時(shí)間,然后在C#端再次執(zhí)行相同的操作,并獲取兩者之間的差值來計(jì)算所花費(fèi)的時(shí)間。在 C++ 方面,我發(fā)送的信息long如下:boost::posix_time::ptime current_date_microseconds = boost::posix_time::microsec_clock::local_time();long millisecondStamp2 = current_date_microseconds.time_of_day().total_milliseconds();我將其long作為名為 的變量發(fā)送到 C# timestamp,然后運(yùn)行:long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;long elapsed = milliseconds - timestamp;當(dāng)我打印這些值時(shí),它們看起來像這樣:63705280140098 //c#54540098       //c++63705225600000 // elapsed為什么 C++ 值和 C# 值如此不同?如何以這種方式從系統(tǒng)時(shí)鐘獲得等效值?
查看完整描述

1 回答

?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊

請(qǐng)忽略聲稱 .NET刻度線分為兩部分的評(píng)論DateTime。這個(gè)評(píng)論是不正確的。該屬性返回單位為“百萬分之一秒”DateTime.Ticks的刻度計(jì)數(shù),并測(cè)量從“公歷 0001 年 1 月 1 日 0:00:00 UTC”開始的刻度數(shù)。它是一個(gè)直接整數(shù)值,所有位根據(jù)其在該值中的重要性對(duì)總數(shù)做出同等貢獻(xiàn)。

現(xiàn)在,就結(jié)果的差異而言……

C++ 表達(dá)式為您提供當(dāng)天的current_date_microseconds.time_of_day().total_milliseconds()總毫秒數(shù)。即,這是自午夜以來的總毫秒數(shù)(根據(jù)該值,您似乎在當(dāng)?shù)貢r(shí)間下午 3 點(diǎn)左右執(zhí)行了代碼)。

另一方面,.NET 表達(dá)式使用的DateTime.Now是測(cè)量自紀(jì)元開始(即自 0001 年 1 月 1 日以來)的毫秒數(shù)。

這兩個(gè)值根本沒有可比性。它們代表了兩個(gè)完全不同的時(shí)期。

理論上,您可以通過在 .NET 端使用DateTime.Now.TimeOfDay.TotalMilliseconds.?這將使您更接近您期望的值。

然而…

我不清楚是否能保證您使用的 C++ POSIX API 將使用與 .NET API 完全相同的時(shí)鐘參考。此外,即使是這樣,API 本身也會(huì)產(chǎn)生一些開銷,并且線程調(diào)度擾動(dòng)可能會(huì)在計(jì)算中引入錯(cuò)誤。

在我看來,更好的方法是在 .NET 端使用類System.Diagnostics.Stopwatch來測(cè)量調(diào)用 C++ DLL 所花費(fèi)的整個(gè)時(shí)間,然后在 C++ DLL 中,使用 POSIX API 來測(cè)量C++ 代碼執(zhí)行并將其傳回 C# 端所需的時(shí)間。

然后,C# 端只需從自己的時(shí)間中減去 C++ 時(shí)間,即可大致確定調(diào)用的總開銷是多少。(當(dāng)然,確保每個(gè)值使用完全相同的單位……例如毫秒。)

即便如此,重要的是要記住:

  • 如果您在同一調(diào)用中返回 C++ 時(shí)間值,則其本身可能會(huì)影響調(diào)用的總開銷。

  • 一些明顯的開銷可能是線程調(diào)度的影響。即,如果您的線程在調(diào)用期間被搶占,那么您的測(cè)量的一部分將是線程被搶占的時(shí)間。

  • 至少在 .NET 方面,可能在 C++ 方面,計(jì)時(shí)的精度仍然存在限制。該類Stopwatch肯定比 更精確和更可取DateTime,但是如果開銷足夠小,您可能不會(huì)獲得有用的結(jié)果(但是當(dāng)然,如果它那么小,那么可能足以發(fā)現(xiàn)它太小而無法獲得有用的結(jié)果: ))。


查看完整回答
反對(duì) 回復(fù) 2024-01-20
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)