X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmainloop.h;h=136d90e04858c1c3b4112c41d8c21dd9c53475d4;hb=d5e8872563f6fde8299db971ffb6494c2438c590;hp=1e1adf38a1ad62887340711ded51e4d0d700294d;hpb=ccc6aa0a17952f8dacc0edd60de8e5aa11e2df60;p=libucw.git diff --git a/lib/mainloop.h b/lib/mainloop.h index 1e1adf38..136d90e0 100644 --- a/lib/mainloop.h +++ b/lib/mainloop.h @@ -7,9 +7,11 @@ * of the GNU Lesser General Public License. */ +#ifndef _UCW_MAINLOOP_H +#define _UCW_MAINLOOP_H + #include "lib/clists.h" -typedef s64 timestamp_t; /* We measure time in milliseconds */ extern timestamp_t main_now; /* Current time in milliseconds since UNIX epoch */ extern sh_time_t main_now_seconds; /* Current time in seconds since the epoch */ extern uns main_shutdown; @@ -68,10 +70,17 @@ void file_close_all(void); /* Close all known main_file's; frequently used bef struct main_hook { cnode n; - int (*handler)(struct main_hook *ho); /* [*] Hook function; returns 1 if should be called again */ + int (*handler)(struct main_hook *ho); /* [*] Hook function; returns HOOK_xxx */ void *data; /* [*] For use by the handler */ }; +enum main_hook_return { + HOOK_IDLE, /* Call again when the main loop becomes idle again */ + HOOK_RETRY, /* Call again as soon as possible */ + HOOK_DONE = -1, /* Shut down the main loop if all hooks return this value */ + HOOK_SHUTDOWN = -2 /* Shut down the main loop immediately */ +}; + void hook_add(struct main_hook *ho); void hook_del(struct main_hook *ho); @@ -95,3 +104,5 @@ int process_fork(struct main_process *mp); void main_init(void); void main_loop(void); void main_debug(void); + +#endif