> DxLib::GetHitKeyStateAllのコストも結果の0比較のコストも無視できないコストがかかってしまいます(当方環境で1000ms程度)
1000ms とは 1秒のことでしょうか?
それはあまりにも時間が掛かりすぎているので、何か別の原因があるような気がします…
手元で yumetodoさんの関数を参考に以下のようなプログラムを作成して実行してみましたが、
flush_stream に掛かる時間は概ね 4μsec 前後でした
( ProcessMessage() を呼び出している関係か定期的に 100μsec 以上掛かっていますが… )
#include "DxLib.h"
#define KEYBUFSIZE 256
bool flush_stream()
{
char buf[ 2 ][ KEYBUFSIZE ] = {};
GetHitKeyStateAll( buf[ 0 ] );
char* first_p;
char* last_p;
size_t i;
for (first_p = buf[0], last_p = buf[1]; 0 == ProcessMessage() && 0 == DxLib::GetHitKeyStateAll(last_p); ) {
for (i = 0; i < KEYBUFSIZE && !first_p[i] && !last_p[i]; ++i);
if (i == KEYBUFSIZE) return true;
Sleep(2);
char* temp = first_p;
first_p = last_p;
last_p = temp;
}
return false;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
LONGLONG Time = GetNowHiPerformanceCount() ;
flush_stream() ;
Time = GetNowHiPerformanceCount() - Time;
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Time:%d", ( int )Time ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
速度的に問題は無い様に思いますので、専用の関数を追加する必要は無い気がします (・・;