/* * Copyright (C) 2012 Tobias Brunner * Copyright (C) 2005-2007 Martin Willi * Copyright (C) 2005 Jan Hutter * HSR Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. See . * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ /** * @defgroup processor processor * @{ @ingroup processing */ #ifndef PROCESSOR_H_ #define PROCESSOR_H_ #include typedef struct processor_t processor_t; #include #include #include /** * The processor uses threads to process queued jobs. */ struct processor_t { /** * Get the total number of threads used by the processor. * * @return size of thread pool */ u_int (*get_total_threads) (processor_t *this); /** * Get the number of threads currently waiting for work. * * @return number of idle threads */ u_int (*get_idle_threads) (processor_t *this); /** * Get the number of threads currently working, per priority class. * * @param priority to check * @return number of threads in priority working */ u_int (*get_working_threads)(processor_t *this, job_priority_t prio); /** * Get the number of queued jobs for a specified priority. * * @param prio priority class to get job load for * @return number of items in queue */ u_int (*get_job_load) (processor_t *this, job_priority_t prio); /** * Adds a job to the queue. * * This function is non blocking and adds a job_t to the queue. * * @param job job to add to the queue */ void (*queue_job) (processor_t *this, job_t *job); /** * Directly execute a job with an idle worker thread. * * If no idle thread is available, the job gets executed by the calling * thread. * * @param job job, gets destroyed */ void (*execute_job)(processor_t *this, job_t *job); /** * Set the number of threads to use in the processor. * * If the number of threads is smaller than number of currently running * threads, thread count is decreased. Use 0 to disable the processor. * * This call does not block and wait for threads to terminate if the number * of threads is reduced. Instead use cancel() for that during shutdown. * * @param count number of threads to allocate */ void (*set_threads)(processor_t *this, u_int count); /** * Sets the number of threads to 0 and cancels all blocking jobs, then waits * for all threads to be terminated. */ void (*cancel)(processor_t *this); /** * Destroy a processor object. */ void (*destroy) (processor_t *processor); }; /** * Create the thread pool without any threads. * * Use the set_threads method to start processing jobs. * * @return processor_t object */ processor_t *processor_create(); #endif /** PROCESSOR_H_ @}*/