- 締切済み
宣言による処理の重さ
第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; } にするとアプリケーションのパフォーマンスはよくなりますか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nitscape
- ベストアンサー率30% (275/909)
コンパイラやコンパイルオプションによっても違うと思いますが、私の環境では... staticにするとアセンブラでのlea命令1つ分ですが消費クロック数は減ります。ただしMessageBox表示直前の処理なので...減る意味はほとんどないです。 charの宣言位置は変えてもパフォーマンスは変わりません。 またstaticにした場合はもしかしたらcriticalsectionが必要になるかもしれません。その場合はlock,unlock処理が必要になるので逆にパフォーマンスが落ちます。 何にせよこの手のフックはパフォーマンスを落とす処理です。フックを使わない方法を考えた方が速度的にもいいと思います。
- MetalKing
- ベストアンサー率57% (15/26)
>と書いてありますが、char str[256];をstatic char str[256];にしたり、 略 > にするとアプリケーションのパフォーマンスはよくなりますか? なりません 特に、staticはやめたほうがいい
お礼
ありがとうございました。