wpool.h(3)

NAME
wpool.h

SYNOPSIS

#include <Inventor/C/basic.h>
#include <Inventor/C/threads/common.h>

  Typedefs
typedef void cc_wpool_f(void *)

  Functions
cc_wpool * cc_wpool_construct (int numworkers)
void cc_wpool_destruct (cc_wpool *pool)
int cc_wpool_get_num_workers (cc_wpool *pool)
void cc_wpool_set_num_workers (cc_wpool *pool, int newnum)
void cc_wpool_wait_all (cc_wpool *pool)
SbBool cc_wpool_try_begin (cc_wpool *pool, int numworkersneeded)
void cc_wpool_begin (cc_wpool *pool, int numworkersneeded)
void cc_wpool_start_worker (cc_wpool *pool, cc_wpool_f *workfunc, void *closure)
void cc_wpool_end (cc_wpool *pool)

Function Documentation

  cc_wpool* cc_wpool_construct (int numworkers)
Construct worker pool.

  void cc_wpool_destruct (cc_wpool * pool)
Destruct worker pool. Will wait for all jobs in progress to finish

  int cc_wpool_get_num_workers (cc_wpool * pool)
Returns the number of workers in the pool.

  void cc_wpool_set_num_workers (cc_wpool * pool, int newnum)
Sets the number of workers in the pool.

  void cc_wpool_wait_all (cc_wpool * pool)
Wait for all pool workers to finish working and go into idle state. This method should only be called by the thread controlling the pool. A pool worker should not call this method, since it will obviously never return from here (it will never go idle).

  SbBool cc_wpool_try_begin (cc_wpool * pool, int numworkersneeded)
Locks the pool so that workers can be started using the cc_wpool_start_worker() method. numworkersneeded should contain the minimum number of workers that is needed. If numworkersneeded workers are available, the pool will be locked and TRUE is returned. Otherwise FALSE is returned.

Usage pseudo code:

int numworkers = 5;
if (cc_wpool_begin(pool, numworkers)) {
  for (int i = 0; i < numworkers; i++) {
    cc_wpool_start_worker(my_work[i], my_closure[i]);
  }
  cc_wpool_end(pool);
}

Important! If too few workers are available, the pool will not be locked and cc_wpool_end() should not be called.

See also
    cc_wpool_start_worker(), cc_wpool_end()

  void cc_wpool_begin (cc_wpool * pool, int numworkersneeded)
Wait for numworkersneeded workers to become idle. When returning from this call, the pool will be locked, and up to numworkersneeded can be started using the cc_wpool_start_worker() method. Remember to call cc_wpool_end() to unlock the pool again.

See also
    cc_wpool_try_begin()

  void cc_wpool_start_worker (cc_wpool * pool, cc_wpool_f * workfunc, void * closure)
Starts a worker. The pool must be locked (using cc_wpool_begin()) before calling this method.

See also
    cc_wpool_begin() , cc_wpool_end()

  void cc_wpool_end (cc_wpool * pool)
Unlocks the pool after a cc_wpool_begin(), cc_wpool_start_worker() sequence.

Please note that if cc_wpool_begin() returns 0, you should not call cc_wpool_end().

See also
    cc_wpool_begin(), cc_wpool_start_worker()

Author

Generated automatically by Doxygen for Coin from the source code.