ログイン
編集不可のページディスカッション情報添付ファイル
"clear/wm_devel/2012-12-23"の差分

MMA
1と2のリビジョン間の差分
2012-12-23 15:33:22時点のリビジョン1
サイズ: 2460
編集者: clear
コメント:
2013-01-02 16:00:11時点のリビジョン2
サイズ: 2590
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 37: 行 37:

リクエストのバッファリングについて参考: http://lists.freedesktop.org/archives/xcb/2008-December/004152.html

XCBのリクエスト処理

xcb-requests(3)を読んでまとめただけ。

Xクライアントがサーバに対して送るリクエストは2種類ある。

  • リプライを要求しないもの
    • 単純に要求のみを行うもの。例えばMapRequest

    • リクエストの結果は、それが成功したか失敗したかのみ
  • リプライを要求するもの
    • 「何かを取得する」リクエストがこれにあたる。例えばInternAtom

    • 成否の他に、リクエスト成功時はリプライが来る

さらに、XCBではエラーハンドリングの方法が2つ用意されている。

  • checked
    • リクエストを投げる関数が成功/失敗が確定するまでブロックする。エラーは即座に確認できる
    • リプライを要求するリクエストに関してはこちらがデフォルト
  • unchecked
    • リクエストを投げる関数がブロックしない。発生したエラーはイベントループで通知される
    • リプライを要求しないリクエストに関してはこちらがデフォルト

以上2*2=4通りの方法が存在する。

  • リプライなし、unchecked(デフォルト)
    • リクエストを投げるときは対応する関数を呼ぶだけ。リプライがないので本当にそれだけ
    • エラーはイベントループで検出
  • リプライなし、checked
    • XXX_checkedのように、関数名に_checkedというサフィックスがつく

    • 帰ってきたcookieをxcb_request_checkに渡すとエラーの有無が分かる

    • 失敗した場合先に進んではいけない(エラー処理が必要な)場合に使う
  • リプライあり、checked(デフォルト)
    • checkedだがリプライなしの方とは違ってサフィックスはない
    • XXXという関数に対してXXX_replyという関数でリプライを取得する。このとき同時にエラーの有無を取得する

    • 結果が必要なので普通はこれを使えばいいはず
  • リプライあり、unchecked
    • 今度は逆に_uncheckedというサフィックスがつく

    • リプライの取得方法は同じ。エラーはイベントループで検出
    • 今ひとつ使いどころが分からないが、manを読む限りリクエストを投げてからリプライを受け取るまでに他の処理を行うような場合を想定している?

リクエストのバッファリングについて参考: http://lists.freedesktop.org/archives/xcb/2008-December/004152.html

clear/wm_devel/2012-12-23 (最終更新日時 2013-03-08 17:11:26 更新者 clear)