我試試這個簡單的代碼來計算硬盤的寫入速度在我的應用程序:鏈接失敗。如何使用'NtQuerySystemTime'窗口功能?
#include <winternl.h>
...
float speed;
double divident;
PLARGE_INTEGER systime0, systime1;
LONGLONG elapsed_time;
...
write_flag = true ;
NtQuerySystemTime(systime0) ;
f_out->write(out_buffer0, chunk_len0);
f_out->write(out_buffer1, chunk_len1);
NtQuerySystemTime(systime1);
elapsed_time = systime1->QuadPart - systime0->QuadPart;
write_flag = false ;
divident = static_cast<double>(chunk_len0 + chunk_len1)/1.048576 ; // 1.024 * 1.024 = 1.048576; divident yield value 1000000 times greater then value in MB
divident *= 10 ; // I want 'speed' to be in MB/s
speed = divident/static_cast<double>(elapsed_time) ;
...
,但它無法鏈接。
在MSDN中,NtQuerySystemTime
documentation說,有沒有相關的導入庫,而我必須使用LoadLibrary()
和GetProcAddress()
功能動態鏈接到Ntdll.dll
。但我不明白如何使用這些功能。有人可以提供一個如何使用這些函數的代碼示例嗎?
這同一篇文章也說: 「應用程序應該使用'GetSystemTimeAsFileTime'功能」。那你爲什麼不呢?你覺得'NtQuerySystemTime'給你,你不能另外獲得? –
嗯,也許我應該仔細閱讀,但是解釋如何使用'NtQuerySystemTime()'的問題的答案對我來說也是好的,因爲我將會學到更多 – user1978386
由於GetSystemTimeAsFileTime執行相同的操作,所以沒有理由使用NtQuerySystemTime,將在未來版本的Windows中受支持。確保您的客戶瞭解您的程序依賴於明確記錄爲「可能隨時停止工作」的功能,以便在它停止工作時,他們將會打電話給您,而不是Microsoft。 –