4

おはようございます、

さまざまなソフトウェアアプリケーション間の遅延を測定するために、CPUの高解像度パフォーマンスカウンターの値を取得する必要があります。私のc(++ |#)では、

BOOL WINAPI QueryPerformanceCounter(__out LARGE_INTEGER * lpPerformanceCount);

WinApi呼び出し。Javaからカウンターを取得する適切な方法は何ですか。jnaを検索しても成功しません。これがプラットフォーム固有の問題であることは知っていますが、独自のjniラッパーを作成するよりも迅速な方法があるのではないでしょうか。

よろしくお願いします、アーミン

4

2 に答える 2

3

使ってSystem.nanoTimeみませんか?すでにマシンのパフォーマンスカウンターを使用しており、ネイティブラッパーを作成する必要はないと思います。

更新:「Windowsの時計とタイマー」セクションのjvmの時計とタイマーに関するこの記事によると

System.nanoTime()は、QueryPerformanceCounter /QueryPerformanceFrequencyAPIを使用して実装されます

于 2012-04-30T09:41:10.293 に答える
2

これがネイティブラッパーコードです

1)ファイルW32Call.java

package jmSense.Native; public class W32Call {
public native static long QueryPerformanceCounter( );
public native static int QueryPerformanceCounterInt32( );

2)javahを実行してインクルードファイルを作成します

3)からdll「MyNativeExtensions.dll」を作成します

#include "stdafx.h"
#include "windows.h"
#include "jmSense_Native_W32Call.h" 

JNIEXPORT jlong JNICALL Java_jmSense_Native_W32Call_QueryPerformanceCounter(JNIEnv *, jclass)
{  
    LARGE_INTEGER g_CurentCount; 
    QueryPerformanceCounter((LARGE_INTEGER*)&g_CurentCount); 
    return g_CurentCount.QuadPart; 
}

JNIEXPORT jint JNICALL Java_jmSense_Native_W32Call_QueryPerformanceCounterInt32(JNIEnv *, jclass)
{  
     LARGE_INTEGER g_CurentCount; 
     QueryPerformanceCounter((LARGE_INTEGER*)&g_CurentCount); 
     return g_CurentCount.LowPart;
}

4)次のように使用します。

System.loadLibrary("My Native Extensions");
System.out.println(W32Call.QueryPerformanceCounter());

大丈夫

于 2012-06-04T09:28:07.173 に答える