トップページ > 記事閲覧
ウィンドウ表示後のブレークポイントについて
名前:新潟県産コシヒカリ 日時: 2015/05/05 13:47

初めまして、いつもDXライブラリのお世話になっています。 Visual Studio Express 2013 for Windows Desktopを使い、DXライブラリで開発をしているのですが、 ブレークポイント関係で問題が発生しましたので、質問させてください。 問題についてできるだけ単純化させたかったので、ひとまず以下のコードを書きました。 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetGraphMode(800, 600, 32, 60); DxLib::ChangeWindowMode(TRUE); if (DxLib::DxLib_Init() == -1) return 0; while (DxLib::ProcessMessage() == 0) { } return 0; }; ウィンドウを表示し、ウィンドウが閉じたら終了するだけのプログラムです。 WinMain内の最初にブレークポイントを置き、ステップオーバーでウィンドウを表示した後(while文の行)まで進めて、 その次にステップオーバーをしようとすると、そこからしばらく処理が返ってこないような状態になります。(30秒〜1分程度?) この状態になると、マウスクリックやキーボードによる反応もかなり遅くなります。 また、マウスカーソルの移動中には、「ポポポポ」といった音がWindowsから発せられます。 デバッグせずに実行すれば問題ないのですが、ブレークポイントなしでのデバッグは手間がかかりすぎます。 こういった現象について、なにか対策等はできますでしょうか? PCのスペックは以下の通りです。 OS:Windows7 64bit CPU:Intel Core i7-4771 3.50GHz 3.50GHz メモリ:8.00GB グラフィックス:GeForce GTX 650 また、別環境(Surface Pro3)では同様の現象が起こらなかったのですが、環境依存ということでしょうか? こちらのスペックは以下の通りです。 OS:Windows8.1 Pro 64bit CPU:Intel Core i5-4300U 1.90GHz 2.50GHz メモリ:8.00GB
メンテ

Page: 1 |

Re: ウィンドウ表示後のブレークポイントについて ( No.1 )
名前:管理人 日時:2015/05/06 02:14

ご報告の現象はキーボードのキーの押下状態の取得に DirectInput を使用していることが原因です DxLib_Init 呼び出しより前の箇所に SetKeyboardNotDirectInputFlag( TRUE ) ; という記述を追加してキーの押下状態の取得に DirectInput を使用しないようにすると現象を 回避することができますので、よろしければお試しください ただ、WindowsXP やそれ以前のOSではキーの押下状態の取得に DirectInput を使用しないと 左シフトキーと右シフトキーの区別ができない等の動作の違いがありますので、開発中は SetKeyboardNotDirectInputFlag( TRUE ) ; の記述を使用して、リリースする際には 削除やコメントアウトをする方が良いと思います > また、別環境(Surface Pro3)では同様の現象が起こらなかったのですが、環境依存ということでしょうか? 私も確認してみましたが、どうやら本件の現象は WindowsVista と Windows7 で発生して、 WindowsXP とそれより前のOSや Windows8.1 では発生しないようです ( Windows8 は確認していないので分かりません・・・ )
メンテ
Re: ウィンドウ表示後のブレークポイントについて ( No.2 )
名前:新潟県産コシヒカリ 日時:2015/05/06 21:36

ご返答ありがとうございます。 ご指摘の通り、DxLib_Initの直前にSetKeyboardNotDirectInputFlag( TRUE )を加えましたが、 変化はありませんでした。 似たような処理に SetUseDirectInputFlag( FALSE ); があったようなので使ってみたところ、こちらであれば期待通りのブレークポイントの挙動になりました。 マウス入力などについてもDirectInputを使用しないようにするものであるかと思いますが、 キーボード以外についても、DirectInputを使う場合とで挙動の違いはあるのでしょうか?
メンテ
Re: ウィンドウ表示後のブレークポイントについて ( No.3 )
名前:管理人 日時:2015/05/07 06:58

すみません、マウスについて DirectInput を使用した場合は大丈夫なようですが、 ゲームパッドについて DirectInput を使用した場合は本件の現象が発生してしまうようです 手元の環境に接続されているゲームパッドが Xbox360 コントローラで、XInput という DirectInput とは異なるAPIを使用していたので見落としていました orz お察しの通り SetUseDirectInputFlag( FALSE ); を実行することでゲームパッドについても DirectInput を使用しなくなるので、 本件の現象が発生しなくなった、ということになります m(_ _;m
メンテ
Re: ウィンドウ表示後のブレークポイントについて ( No.4 )
名前:新潟県産コシヒカリ(解決) 日時:2015/05/10 23:56

ご丁寧な回答ありがとうございます! ゲームパッド利用も想定して、 SetUseDirectInputFlag の方を使いたいと思います。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存