home | help
iv_task(3)		   ivykis programmer's manual		      iv_task(3)

NAME
     iv_task_register, iv_task_unregister, iv_task_registered - deal with ivykis
     tasks

SYNOPSIS
     #include <iv.h>

     struct iv_task {
	     void	     *cookie;
	     void	     (*handler)(void *);
     };

     void IV_TASK_INIT(struct iv_task *task);
     void iv_task_register(struct iv_task *task);
     void iv_task_unregister(struct iv_task *task);
     int iv_task_registered(const struct iv_task *task);

DESCRIPTION
     The  functions  iv_task_register  and  iv_task_unregister register, respec-
     tively unregister, a task with the  current  thread's  ivykis  event  loop.
     iv_task_registered  on a task returns true if that task is currently regis-
     tered with ivykis.

     A task is like a timer, but with an immediate timeout.  When a task is reg-
     istered, unless it is unregistered again first, the callback function spec-
     ified by ->handler is guaranteed to be called once, in the thread that  the
     task  was registered in, some time after control returns to the ivykis main
     loop but before ivykis will sleep for more events,  with  ->cookie  as  its
     first  and sole argument.	When this happens, the task is transparently un-
     registered.

     Tasks are mainly used for scheduling code for execution where it is not ap-
     propriate to directly run that code in the calling  context  (for	example,
     because  the  current context might be run as a callback function where the
     caller expects certain conditions to remain invariant  after  the	callback
     completes).

     The  application is allowed to change the ->cookie and ->handler members at
     any time.

     A given struct iv_task can only be registered in one thread at a time,  and
     a task can only be unregistered in the thread that it was registered from.

     There is no limit on the number of tasks registered at once.

     See iv_examples(3) for programming examples.

SEE ALSO
     ivykis(3), iv_examples(3)

ivykis				   2010-08-15			      iv_task(3)

home | help