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

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

概要

#define             GCUT_EVENT_LOOP_ERROR
struct              GCutEventLoop;
struct              GCutEventLoopClass;
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);
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);
GQuark              gcut_event_loop_error_quark         (void);
gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                         gboolean may_block);
void                gcut_event_loop_quit                (GCutEventLoop *loop);
gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                         guint tag);
void                gcut_event_loop_run                 (GCutEventLoop *loop);
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_watch_io            (GCutEventLoop *loop,
                                                         GIOChannel *channel,
                                                         GIOCondition condition,
                                                         GIOFunc function,
                                                         gpointer data);

オブジェクト階層

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


struct GCutEventLoop

struct GCutEventLoop;


struct GCutEventLoopClass

struct GCutEventLoopClass {
    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);
};


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_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_error_quark ()

GQuark              gcut_event_loop_error_quark         (void);


gcut_event_loop_iterate ()

gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                         gboolean may_block);

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

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

gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                         guint tag);

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

loop :

GCutEventLoop

tag :

削除するソースのID。

戻り値 :

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

1.1.6から


gcut_event_loop_run ()

void                gcut_event_loop_run                 (GCutEventLoop *loop);

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

loop :

GCutEventLoop

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_watch_io ()

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

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

loop :

GCutEventLoop

channel :

GIOChannel

condition :

監視する状態。

function :

呼び出される関数

data :

functionに渡されるデータ

戻り値 :

イベントID。

1.1.6から