From: Masao M. <mu...@hi...> - 2006-05-25 13:34:56
|
むとうです。 On Thu, 25 May 2006 11:14:08 +0900 "Kouhei Sutou" <ko...@co...> wrote: > 須藤です. > > > 06/05/25 に Kouhei Sutou<ko...@co...> さんは書きました: > > > > できれば、glibの方もお願いしちゃってよろしいでしょうか? > > > #rbglib_maincontext.cあたりかな。 > > > > わかりました. > > 明日やっておきます. > > ざくっとやってみましたが,いくつか問題点が見えてきました. > > * funcをそのままdataとしてg_idle_addしているわけではないので, > idle_removeが動かなくなる. なるほど。正直、削除できなくてもいいやぁ、くらいで実装してしまった記憶が(^^;)。 idle_addの方で、 g_idle_addの戻り値をキーにしてfuncオブジェクトを保持して、 g_idle_removeの方は、g_idle_addの戻り値を引数として受け取って、そのfuncオブジェクト を検索し、dataとして渡す、と言う感じでどうでしょうか? > * GLib::Source.removeでG_REMOVE_RELATIVEしていないのでリーク > する.G_REMOVE_RELATIVEできるようにするには...GLib::Source > にG_RELATIVE2しておくとよいのかなぁ... なるほど・・・。確かにそのような対応が必要そうですね。 > * GLib::Idle.addでpriorityも設定出来るようにした方がよさげだ > けど,現在はfuncをblockとしてではなくoptionalとして取得でき > るようになっているので,priorityを入れるための引数の順番が > 悩ましい. g_idle_add()からg_idle_add_full()にしたい、ってことですよね。 これ、API変えちゃいましょう。互換性を持たせておけばいいです。 GLib::Idle.add(&func) GLib::Idle.add(priority, &func) APIリファレンスからは前者をObsolete扱いで抜かしちゃえばいいでしょう。 idle_add(argc, argv, self) { VALUE arg1, arg2; rb_scan_args(argc, argv, "02", &arg1, &arg2); if arg1 がProc else arg1がpriority -- .:% Masao Mutoh<mu...@hi...> |