抽象化されたイベントループ 3 Cutterライブラリ
抽象化されたイベントループ GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループAPI。

## 概要

    #define             GCUT_EVENT_LOOP_ERROR
                        GCutEventLoop;
                        GCutEventLoopClass;
    GQuark              gcut_event_loop_error_quark         (void);
    void                gcut_event_loop_run                 (GCutEventLoop *loop);
    gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                             gboolean may_block);
    void                gcut_event_loop_quit                (GCutEventLoop *loop);
    guint               gcut_event_loop_watch_io            (GCutEventLoop *loop,
                                                             GIOChannel *channel,
                                                             GIOCondition condition,
                                                             GIOFunc function,
                                                             gpointer data);
    guint               gcut_event_loop_watch_child         (GCutEventLoop *loop,
                                                             GPid pid,
                                                             GChildWatchFunc function,
                                                             gpointer data);
    guint               gcut_event_loop_watch_child_full    (GCutEventLoop *loop,
                                                             gint priority,
                                                             GPid pid,
                                                             GChildWatchFunc function,
                                                             gpointer data,
                                                             GDestroyNotify notify);
    guint               gcut_event_loop_add_timeout         (GCutEventLoop *loop,
                                                             gdouble interval_in_seconds,
                                                             GSourceFunc function,
                                                             gpointer data);
    guint               gcut_event_loop_add_timeout_full    (GCutEventLoop *loop,
                                                             gint priority,
                                                             gdouble interval_in_seconds,
                                                             GSourceFunc function,
                                                             gpointer data,
                                                             GDestroyNotify notify);
    guint               gcut_event_loop_add_idle            (GCutEventLoop *loop,
                                                             GSourceFunc function,
                                                             gpointer data);
    guint               gcut_event_loop_add_idle_full       (GCutEventLoop *loop,
                                                             gint priority,
                                                             GSourceFunc function,
                                                             gpointer data,
                                                             GDestroyNotify notify);
    gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                             guint tag);

## オブジェクト階層

      GObject
       +----GCutEventLoop

## 説明

GCutEventLoopはイベントループをカプセル化します。イベントループはGCutProcessで使われています。GCutProcessはデフォルトではGLibのデフォルトGMainContextを使います。

ふつうはカスタムGCutEventLoopは必要ありません。必要になるのは特別な場合だけです。例えば、イベントループのバックエンドにGLibのGMainLoopではなく、libevのイベントループに使っている場合です。

GCutterはGLibのGMainContextとGMainLoop用のGCutEventLoopであるGCutGLibEventLoopを提供します。

## 詳細

### GCUT_EVENT_LOOP_ERROR

    #define GCUT_EVENT_LOOP_ERROR           (gcut_event_loop_error_quark())

GCUT_EVENT_LOOP_ERROR

### GCutEventLoop

    typedef struct _GCutEventLoop GCutEventLoop;

GCutEventLoop

### GCutEventLoopClass

    typedef struct {
        GObjectClass parent_class;

        void     (*run)              (GCutEventLoop   *loop);
        gboolean (*iterate)          (GCutEventLoop   *loop,
                                      gboolean         may_block);
        void     (*quit)             (GCutEventLoop   *loop);

        guint    (*watch_io)         (GCutEventLoop   *loop,
                                      GIOChannel      *channel,
                                      GIOCondition     condition,
                                      GIOFunc          function,
                                      gpointer         data);
        guint    (*watch_child_full) (GCutEventLoop   *loop,
                                      gint             priority,
                                      GPid             pid,
                                      GChildWatchFunc  function,
                                      gpointer         data,
                                      GDestroyNotify   notify);
        guint    (*add_timeout_full) (GCutEventLoop   *loop,
                                      gint             priority,
                                      gdouble          interval_in_seconds,
                                      GSourceFunc      function,
                                      gpointer         data,
                                      GDestroyNotify   notify);
        guint    (*add_idle_full)    (GCutEventLoop   *loop,
                                      gint             priority,
                                      GSourceFunc      function,
                                      gpointer         data,
                                      GDestroyNotify   notify);
        gboolean (*remove)           (GCutEventLoop   *loop,
                                      guint            tag);
    } GCutEventLoopClass;

GCutEventLoopClass

### gcut_event_loop_error_quark ()

    GQuark              gcut_event_loop_error_quark         (void);

戻り値 :

gcut_event_loop_error_quark

### gcut_event_loop_run ()

    void                gcut_event_loop_run                 (GCutEventLoop *loop);

`gcut_event_loop_quit()`が呼ばれるまでイベントループを回します。

loop :

  GCutEventLoop。

1.1.6から

gcut_event_loop_run

### gcut_event_loop_iterate ()

    gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                             gboolean may_block);

イベントループを1回だけ回します。もし、イベントがなくmay_blockが`TRUE`なら、イベントがくるまで待ちつづけます。may_blockが`FALSE`なら、イベントがくるのを待ちません。

loop :

  GCutEventLoop。

may_block :

  呼び出しがブロックするかどうか。

戻り値 :

  イベントを処理したら`TRUE`。

1.1.6から

gcut_event_loop_iterate

### gcut_event_loop_quit ()

    void                gcut_event_loop_quit                (GCutEventLoop *loop);

実行中のloopを止めます。

loop :

  GCutEventLoop。

1.1.6から

gcut_event_loop_quit

### gcut_event_loop_watch_io ()

    guint               gcut_event_loop_watch_io            (GCutEventLoop *loop,
                                                             GIOChannel *channel,
                                                             GIOCondition condition,
                                                             GIOFunc function,
                                                             gpointer data);

channelをデフォルトの優先度でloopに追加します。channelにconditionイベントが発生したらfunctionが呼ばれます。

loop :

  GCutEventLoop。

channel :

  GIOChannel。

condition :

  監視する状態。

function :

  呼び出される関数

data :

  functionに渡されるデータ

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_watch_io

### gcut_event_loop_watch_child ()

    guint               gcut_event_loop_watch_child         (GCutEventLoop *loop,
                                                             GPid pid,
                                                             GChildWatchFunc function,
                                                             gpointer data);

pidの子プロセスが終了した時に呼ばれるfunctionをデフォルトの優先度でloopに追加します。

loop :

  GCutEventLoop。

pid :

  監視するプロセスのID

function :

  呼び出される関数

data :

  functionに渡されるデータ

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_watch_child

### gcut_event_loop_watch_child_full ()

    guint               gcut_event_loop_watch_child_full    (GCutEventLoop *loop,
                                                             gint priority,
                                                             GPid pid,
                                                             GChildWatchFunc function,
                                                             gpointer data,
                                                             GDestroyNotify notify);

pidの子プロセスが終了した時に呼ばれるfunctionをデフォルトの優先度でloopに追加します。

loop :

  GCutEventLoop。

priority :

  このイベントの優先度。

pid :

  監視するプロセスのID

function :

  呼び出される関数

data :

  functionに渡されるデータ

notify :

  このイベントが削除された時に呼ばれる関数または`NULL`。

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_watch_child_full

### gcut_event_loop_add_timeout ()

    guint               gcut_event_loop_add_timeout         (GCutEventLoop *loop,
                                                             gdouble interval_in_seconds,
                                                             GSourceFunc function,
                                                             gpointer data);

一定間隔で呼び出されるfunctionをデフォルト優先度で追加します。

loop :

  GCutEventLoop。

interval_in_seconds :

  functionを呼び出す感覚。単位は秒。

function :

  呼び出される関数

data :

  functionに渡されるデータ

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_add_timeout

### gcut_event_loop_add_timeout_full ()

    guint               gcut_event_loop_add_timeout_full    (GCutEventLoop *loop,
                                                             gint priority,
                                                             gdouble interval_in_seconds,
                                                             GSourceFunc function,
                                                             gpointer data,
                                                             GDestroyNotify notify);

定期的に呼び出される関数を優先度priorityで追加します。

loop :

  GCutEventLoop。

priority :

  このイベントの優先度。

interval_in_seconds :

  functionを呼び出す感覚。単位は秒。

function :

  呼び出される関数

data :

  functionに渡されるデータ

notify :

  このイベントが削除された時に呼ばれる関数または`NULL`。

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_add_timeout_full

### gcut_event_loop_add_idle ()

    guint               gcut_event_loop_add_idle            (GCutEventLoop *loop,
                                                             GSourceFunc function,
                                                             gpointer data);

デフォルト優先度より高い優先度がない場合に呼び出される関数functionを追加します。

loop :

  GCutEventLoop。

function :

  呼び出される関数

data :

  functionに渡されるデータ

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_add_idle

### gcut_event_loop_add_idle_full ()

    guint               gcut_event_loop_add_idle_full       (GCutEventLoop *loop,
                                                             gint priority,
                                                             GSourceFunc function,
                                                             gpointer data,
                                                             GDestroyNotify notify);

優先度priorityより高い優先度のイベントがない場合に呼び出される関数functionを追加します。

loop :

  GCutEventLoop。

priority :

  このイベントの優先度。

function :

  呼び出される関数

data :

  functionに渡されるデータ

notify :

  このイベントが削除された時に呼ばれる関数または`NULL`。

戻り値 :

  イベントID。

1.1.6から

gcut_event_loop_add_idle_full

### gcut_event_loop_remove ()

    gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                             guint tag);

IDがtagのイベントを削除します。

loop :

  GCutEventLoop。

tag :

  削除するソースのID。

戻り値 :

  ソースが見つかって削除されたら`TRUE`。

1.1.6から

gcut_event_loop_remove