2016-07-18 13 views
0

私はソケットイベントを登録するロギング機能を書いています。私が抱えている問題は、PeekMessageを呼び出すとMSGという構造のイベントのtimeがあっても、DispatchMessageへのその後の呼び出しは、によって処理され、timeを受け取らないことになりますパラメータ。MSGで時間を使う適切な方法

私が時刻を記録するのに使用している "解決策"は、Windowsアプリケーションのメインループのソケットイベントを検出することです(PeekMessageが発生します)。

これを行う適切な方法はどれですか?むしろ、一般的なルーチンにロギング固有のロジックを追加する必要がない方がよいでしょう。あなたのソケットメッセージハンドラで

答えて

2

使用GetMessageTime()

GetMessage()関数で取得し、最後のメッセージのメッセージ時間を取得します。この時間は、システムが起動されてからメッセージが作成される(スレッドのメッセージキューに置かれる)までの経過時間をミリ秒単位で指定する長い整数です。

メッセージが投稿された時刻:MSG構造のtime分野に比べ

+0

さらに読む:https://blogs.msdn.microsoft.com/oldnewthing/20090618-00/?p=17843 – theB

+0

ありがとうございます。しかし、これは私がメインループの外側で特定のロジックを移動させる方法をまだ見ていません。なぜなら、それはある場所で 'GetMessage'を呼び出すことと、別の場所(特定のロジックが座っている場所)で' GetMessageTime'を呼び出すことになるからです。その後、イベントとその時間との間の対応が保証されません。 –

+0

元の解決策は、メインループで 'PeekMessage'を呼び出し、' MSG'構造体からタイムスタンプを取得することでした。 'GetMessageTime'は同じタイムスタンプを返します。では、あなたの 'WindowProc'ハンドラで' GetMessageTime'を呼び出すことで何が問題になっていますか? –