Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://yahirohumpty.blog2.fc2.com/tb.php/295-33228143

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

GTKのコールバックとタイムアウトの関係

コールバック関数とタイムアウト関数の呼ばれ方を検証してみた.

コールバック処理用のスレッドがあるとして,
タイムアウトがどう絡むか.仮説として考えられたのは,

  1. タイムアウト関数はそのスレッドに接続される.

  2. タイムアウト用のスレッドができる.

  3. タイムアウトごとにスレッドが生成される.


の三つ.

これを検証するために,
タイムアウトの呼ばれるタイミングより長くタイムアウト関数内でスリープさせてみた.
ついでにボタンを作っておいてクリックをコールバックで検知するようにして,
タイムアウト関数に入った瞬間(start)と出る瞬間(end),コールバック内部(click)でそれぞれプリントする.

このとき,もし1.ならstartとendは必ず交互に現れ且つclickはendとstartの間にしか現れない.
2.ならstartとendは必ず交互に現れ且つclickはどのタイミングでも現れる.
3.ならstartとendが混在することになる.というか無限にリソースを食い尽くすので危険.

実験結果は,startとendは必ず交互に現れ且つclickはendとstartの間にしか現れなかった.
のでコールバックとタイムアウトは同じスレッドであることがわかる.
ついでにタイムアウト間隔より早くクリック連打を試してみたら
タイムアウトの前後でコールバックは一度しか呼ばれない.
start,end,clickが1セットで続くことになる.
且つ,イベントキューにクリックがたまっているようで
その後しばらくクリックしてなくてもclickが入る.おそらくクリックした回数分.

なので,例えばタイムアウト関数内で画像処理など人間が知覚できるくらい遅い処理をやらせると
クリック自体にもたつきがでて操作性がよろしくない.
というわけでやっぱり重い処理用スレッドは自作が必要みたいだ.
スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://yahirohumpty.blog2.fc2.com/tb.php/295-33228143

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

yahirohumpty

  • Author:yahirohumpty
  • 某大学の研究員です.
    博士号持ってます.
    ビジョンとロボットが専門.
    その他もろもろのことに興味があります.

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。