Mona の Timer API の問題点

API は以下の 2 つ。

  • set_timer(intervalMsec) returns timerId
  • kill_timer(timerId)


set_timer 後は intervalMsec 毎に MSG_TIMER がそのスレッドのメッセージキューに放り込まれる。kill_timer でタイマーを破棄すれば MSG_TIMER は飛んでこなくなる。

今までこの仕様で特に問題はなかったのだが WebKit がヘビーにタイマーを使うので問題が発覚。WebKit は set_timer(10msec) したあとに数秒、メッセージを消費せずに他のことをやったりするので、メッセージキューが溢れてしまうのだ。
これはやっぱり API が悪い。one shot timer の API を新しく追加して古いのは徐々に置き換えていこうと思う。