抽象化されたイベントループ

## 抽象化されたイベントループ 抽象化されたイベントループ — 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())

### GCutEventLoop

    typedef struct _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;

### gcut_event_loop_error_quark ()

    GQuark              gcut_event_loop_error_quark         (void);

戻り値 : |

### gcut_event_loop_run ()

    void                gcut_event_loop_run                 (GCutEventLoop *loop);

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

`loop` : | GCutEventLoop。

1.1.6から

### 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_quit ()

    void                gcut_event_loop_quit                (GCutEventLoop *loop);

実行中の`loop`を止めます。

`loop` : | GCutEventLoop。

1.1.6から

### 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_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_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_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_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_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_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_remove ()

    gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                             guint tag);

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

`loop` : | GCutEventLoop。
`tag` : | 削除するソースのID。
戻り値 : | ソースが見つかって削除されたら`TRUE`。

1.1.6から