Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
windows SDKの変数定義がおかしいのは知ってますが
変数には意味のある名前を付けるべきですよね。
https://ejje.weblio.jp/content/elapsed+time
uTimeoutとかuKeybordSpanとかが代案。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Windows SDKのその記述に問題があるかの判断は法曹界に委ねようかと思います。
もし記述が将来更新されたらそれに合わせる事にします。
代案のなかでは uTimeout が個人的に分かりやすいです。趣は違いますが uMilliseconds とかでも良いと思います。uInterval でも uHoge でもなんでもコンパイラがエラーを出さなければ…。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
400
>=dwKeyBoardSpeed * (400 - 33) / 31
であることは保証されるのですか?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SystemParametersInfo の呼び出しが失敗しなければ保証されます。
呼び出し後の dwKeyBoardSpeed の値の範囲は 0 ~ 31 です。
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-systemparametersinfow
に書かれている記述を引用します。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
成功することが保証されないので、SystemParametersInfo の戻り値チェックした方がいいです。
あと dwKeyBoardSpeed に対して 31 以下であることの assert を入れた方がいいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あと SystemParametersInfo が失敗した場合の uElapse のデフォルト値も決めておいた方がいいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
おっしゃる通りだと思います。しかし元のコードには SystemParametersInfo の呼び出しが失敗した場合の対処は入っていないので must かというとそうでもないと思います。
失敗した場合にデバッグビルドでは GetLastError 呼んで FormatMessage 呼んで OutputDebugStringW (DEBUG_TRACE 経由)呼んで、とかの対応まで求められないのであれば、こちらで追加の PR を作成して対処します。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
というか、
のマクロがあると良いですね…。。探した感じ既存では無さそうです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
もともとのコードは
nKeyBoardSpeed
を初期化してないので、失敗したときのnKeyBoardSpeed
の値は不定になるので潜在バグですね。失敗したときに、
dwKeyBoardSpeed
あるいはuElapse
の妥当なデフォルト値を設定するようにしとけばいいと思います。
失敗した原因をわかるようにするより、失敗したときに予期しない動作を
しないようにすればいいと思います。
PR お願いします。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#527 を作成しました。