10

このツールを使用したところ、Windows Server 2008 R2 Standard の解像度が 15 ms であるのに対し、Windows 8 の解像度タイマーは 1 ms であることがわかりました。

Windows Server 2008 R2 で低遅延ソフトウェアを実行しているため、タイマーの解像度を 1 ミリ秒に設定したいと考えています。

このmsdn articleを見つけましたが、C# プログラムからタイマーの解像度を変更する方法が説明されていません。それ、どうやったら出来るの?

4

2 に答える 2

17

これを試すことができます:

public static class WinApi
{
    /// <summary>TimeBeginPeriod(). See the Windows API documentation for details.</summary>

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1401:PInvokesShouldNotBeVisible"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage"), SuppressUnmanagedCodeSecurity]
    [DllImport("winmm.dll", EntryPoint="timeBeginPeriod", SetLastError=true)]

    public static extern uint TimeBeginPeriod(uint uMilliseconds);

    /// <summary>TimeEndPeriod(). See the Windows API documentation for details.</summary>

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1401:PInvokesShouldNotBeVisible"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage"), SuppressUnmanagedCodeSecurity]
    [DllImport("winmm.dll", EntryPoint="timeEndPeriod", SetLastError=true)]

    public static extern uint TimeEndPeriod(uint uMilliseconds);
}

そして、次のように使用します。

WinApi.TimeBeginPeriod(1);

そして、元の状態に戻るには:

WinApi.TimeEndPeriod(1);
于 2013-02-25T16:21:34.900 に答える