1 /* ****************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
24 * This file provides APIs related to thread pool. Implementations are provided
25 * by adding a new .c file for each implementation, and adding them conditionally
26 * via the SCONS build script. Currently, cathreadpool_pthreads.c is implemented,
27 * with cathreadpool_winthreads.c being considered. RTOS implementations should use
28 * a name that best describes the used technology, not the OS.
31 #ifndef CA_THREAD_POOL_H_
32 #define CA_THREAD_POOL_H_
42 * Callback type can be registered to thread pool.
44 typedef void (*ca_thread_func)(void *);
46 struct ca_thread_pool_details_t;
50 typedef struct ca_thread_pool
52 struct ca_thread_pool_details_t* details;
56 * This function creates a newly allocated thread pool.
58 * @param num_of_threads The number of worker thread used in this pool.
59 * @param thread_pool_handle Handle to newly create thread pool.
60 * @return Error code, CA_STATUS_OK if success, else error number.
62 CAResult_t ca_thread_pool_init(int32_t num_of_threads, ca_thread_pool_t *thread_pool_handle);
65 * This function adds a routine to be executed by the thread pool at some future time.
67 * @param thread_pool The thread pool structure.
68 * @param method The routine to be executed.
69 * @param data The data to be passed to the routine.
71 * @return CA_STATUS_OK on success.
72 * @return Error on failure.
74 CAResult_t ca_thread_pool_add_task(ca_thread_pool_t thread_pool, ca_thread_func method,
78 * This function stops all the worker threads (stop & exit). And frees all the allocated memory.
79 * Function will return only after joining all threads executing the currently scheduled tasks.
81 * @param thread_pool The thread pool structure.
83 void ca_thread_pool_free(ca_thread_pool_t thread_pool);
87 #endif /* __cplusplus */
89 #endif /* CA_THREAD_POOL_H_ */