« ネットワーク越しのコピーにセキュリティの壁? | トップページ | 自民大躍進! »

2005年9月 6日 (火)

誤りは正さねば!「Sleep」は、良い精度…

まず最初に…

~ごめんなさぁい!

…。

うそ書いちゃいました~。

…。

ボケていましたぁ~。

…。

本当です。

…。

実は、「Sleep」の精度にケかましました…

>でも、2Kだといい感じに動いてくれない…。
と書いてしまった件です…。

…。

と言う訳で、
今回は「Sleep」の精度についてです!
(パフパフ!)

#pragma comment( lib, "WinMm.lib" )
//--------------------------------------
#include    <Windows.h>
#include    <StdIo.h>
//--------------------------------------
#define        LIST_MAX        101
//--------------------------------------
void Function( void )
{
    DWORD            List[LIST_MAX];
    int                i;
    double            Value;
    LARGE_INTEGER    Frequency;
    LARGE_INTEGER    PerformanceCount;

    QueryPerformanceFrequency( &Frequency );
    Value    = ( double )Frequency.QuadPart / 1000.0;

    for( i = 0 ; i < LIST_MAX ; i++ )
    {
        Sleep( 1 );

        QueryPerformanceCounter( &PerformanceCount );
        List[i]    = ( DWORD )( PerformanceCount.QuadPart / Value );
    }

    for( i = 0 ; i < LIST_MAX - 1 ; i++ )
        printf( "%4d\n", List[i + 1] - List[i] );
}
//--------------------------------------
void main( void )
{
    printf( "Test 1 ----------------------\n" );
    Function( );

    printf( "Test 2 ----------------------\n" );
    timeBeginPeriod( 1 );
    Function( );
    timeEndPeriod( 1 );
}

9Xだと…。

Test 1 ----------------------
   3
   ~
Test 2 ----------------------
   1
   ~
上は、3で、±1の誤差が2~30回に1回でる程度。
下は,1で、+1の誤差が2~30回に1回でる程度。

2Kだと…。

Test 1 ----------------------
  10
   ~
Test 2 ----------------------
   1
   ~

上は、10で、±1の誤差が2~30回に1回でる程度。
下は,1で、+1の誤差が4~50回に1回でる程度。

でした…。

結局「timeBeginPeriod」で
「Sleep」の精度は、
上がったのです。

ちょいとボケて見落としていました…。<寝ていました…。

なぜ気が付いたかと言うと…。

それは、それ。
これは、これ。

で気が付きました。

『間違いは、正さねば!』

と天の声が聞こえたのも確か!

電波かもしれんが…。

取り合えず

void TimerWait( void )
{
    static DWORD    Back    = 0;
    DWORD            Wait;

    if( ( Wait = TimerGet( ) - Back ) < WAIT_TIME )
        Sleep( WAIT_TIME - Wait );

    Wait    = TimerGet( ) - Back;
    Back    += Wait - ( Wait % WAIT_TIME );
}

は、それなりに使えそうです…。

でわ…。

|

« ネットワーク越しのコピーにセキュリティの壁? | トップページ | 自民大躍進! »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/5807374

この記事へのトラックバック一覧です: 誤りは正さねば!「Sleep」は、良い精度…:

« ネットワーク越しのコピーにセキュリティの壁? | トップページ | 自民大躍進! »