• 締切済み

宣言による処理の重さ

第161章 キーボード・フック http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm このサイトのLRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)で {   char str[256];   if (nCode < 0)     return CallNextHookEx(hMyHook, nCode, wp, lp);   if (wp >= 0x30 && wp <= 0x39) {     wsprintf(str, "hMyHook = %d", hMyHook);     MessageBox(NULL, str, "MyHookProc", MB_OK);     return CallNextHookEx(hMyHook, nCode, wp, lp);   }   wsprintf(str, "キー入力はインターセプトされました\n フックハンドル= %d", hMyHook);   MessageBox(NULL, str, "インターセプト", MB_OK);   return TRUE; } と書いてありますが、char str[256];をstatic char str[256];にしたり、 {   if (nCode < 0)     return CallNextHookEx(hMyHook, nCode, wp, lp);   if (wp >= 0x30 && wp <= 0x39) {     char str[256];     wsprintf(str, "hMyHook = %d", hMyHook);     MessageBox(NULL, str, "MyHookProc", MB_OK);     return CallNextHookEx(hMyHook, nCode, wp, lp);   }   wsprintf(str, "キー入力はインターセプトされました\n フックハンドル= %d", hMyHook);   MessageBox(NULL, str, "インターセプト", MB_OK);   return TRUE; } にするとアプリケーションのパフォーマンスはよくなりますか?

みんなの回答

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.2

コンパイラやコンパイルオプションによっても違うと思いますが、私の環境では... staticにするとアセンブラでのlea命令1つ分ですが消費クロック数は減ります。ただしMessageBox表示直前の処理なので...減る意味はほとんどないです。 charの宣言位置は変えてもパフォーマンスは変わりません。 またstaticにした場合はもしかしたらcriticalsectionが必要になるかもしれません。その場合はlock,unlock処理が必要になるので逆にパフォーマンスが落ちます。 何にせよこの手のフックはパフォーマンスを落とす処理です。フックを使わない方法を考えた方が速度的にもいいと思います。

ninmurai
質問者

お礼

ありがとうございました。

  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.1

>と書いてありますが、char str[256];をstatic char str[256];にしたり、  略 > にするとアプリケーションのパフォーマンスはよくなりますか? なりません 特に、staticはやめたほうがいい

関連するQ&A