2006-07-21 [長年日記]

[Q3] メッセージキューにポストできるメッセージの最大数は10,000個

PostMessageのドキュメントによると、Windows 2000/XPではメッセージキューにポストできるメッセージの最大数は10,000個だそうです。キューがいっぱいな時にPostMessageすると失敗してFALSEが返ってきます*1

QMAIL3では、同期しているスレッドがモデルの状態を変更したときには、最終的にUIスレッドに対してPostMessageでメッセージを投げて画面を更新するのですが、状況によってはキューにたまるメッセージが10,000個を超えてしまい画面が更新されなくなることがありました*2

この現象が起きる可能性がもっとも高いのは、IMAP4を使っている場合で、同期済みのメッセージに対してサーバ上のフラグを反映させるときに、フラグが変わっているメッセージが大量に*3あった場合です*4

キューに上限がなくてもこんなに大量のメッセージを投げていては効率が悪いので、PostMessageする側でキューにメッセージが残っているかどうかを調べて*5、無駄にメッセージを投げないようにしました。

*1  PostMessageの返り値をちゃんとチェックしているコードはほとんど見た記憶がありませんが…

*2  画面が更新されていないだけなのでデータがおかしくなっているわけではありません

*3  状況にもよりますが3000通以上くらい

*4  たとえば、未読状態で同期したメッセージを他のクライアントから読んで既読し、それを次回同期したときなど

*5  実際にはキューを覗いているわけではありませんが


トップ «前の日記(2006-07-20) 最新 次の日記(2006-07-22)»