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 contains common utility function for handling message ques.
27 #ifndef CA_QUEUEING_THREAD_H_
28 #define CA_QUEUEING_THREAD_H_
32 #include "cathreadpool.h"
41 /** Thread function to be invoked. **/
42 typedef void (*CAThreadTask)(void *threadData);
44 /** Data destroy function. **/
45 typedef void (*CADataDestroyFunction)(void *data, uint32_t size);
47 /** Context based Data destroy function. **/
48 typedef bool (*CAContextDataDestroy)(void *data, uint32_t size, void *ctx);
52 /** Thread pool of the thread started. **/
53 ca_thread_pool_t threadPool;
54 /** mutex for synchronization. **/
56 /** conditional mutex for synchronization. **/
58 /** Thread function to be invoked. **/
59 CAThreadTask threadTask;
60 /** Data destroy function. **/
61 CADataDestroyFunction destroy;
62 /** Variable to inform the thread to stop. **/
64 /** Que on which the thread is operating. **/
69 * Initializes the queuing thread.
70 * @param[in] thread thread data for each thread.
71 * @param[in] handle thread pool handle created.
72 * @param[in] task function to be called for each data.
73 * @param[in] destroy function to data destroy.
74 * @return CA_STATUS_OK or ERROR CODES (CAResult_t error codes in cacommon.h).
76 CAResult_t CAQueueingThreadInitialize(CAQueueingThread_t *thread, ca_thread_pool_t handle,
77 CAThreadTask task, CADataDestroyFunction destroy);
80 * Start the queuing thread.
81 * @param[in] thread thread data that needs to be started.
82 * @return CA_STATUS_OK or ERROR CODES (CAResult_t error codes in cacommon.h).
85 CAResult_t CAQueueingThreadStart(CAQueueingThread_t *thread);
87 CAResult_t CAQueueingThreadStart(CAQueueingThread_t *thread, const char *thread_name);
90 * Add queuing thread data for new thread.
91 * @param[in] thread thread data for new thread control.
92 * @param[in] data data that needs to be given for each thread.
93 * @param[in] size length of the data.
94 * @return CA_STATUS_OK or ERROR CODES (CAResult_t error codes in cacommon.h).
96 CAResult_t CAQueueingThreadAddData(CAQueueingThread_t *thread, void *data, uint32_t size);
99 * Clears queue thread data.
100 * @param[in] thread thread data for new thread control.
101 * @return ::CA_STATUS_OK or Appropriate error code.
103 CAResult_t CAQueueingThreadClearData(CAQueueingThread_t *thread);
106 * Clears queue thread data of specific context.
107 * @param[in] thread thread data for new thread control.
108 * @param[in] callback Function which should return true if the data
109 * needs to be deleted, else returns false
110 * @param[in] ctx Data to pass to callback
112 CAResult_t CAQueueingThreadClearContextData(CAQueueingThread_t *thread,
113 CAContextDataDestroy callback, void *ctx);
116 * Stop the queuing thread.
117 * @param[in] thread thread data that needs to be started.
118 * @return CA_STATUS_OK or ERROR CODES (CAResult_t error codes in cacommon.h).
121 CAResult_t CAQueueingThreadStop(CAQueueingThread_t *thread);
124 * Terminate the queuing thread.
125 * @param[in] thread thread data for each thread.
126 * @return CA_STATUS_OK or ERROR CODES (CAResult_t error codes in cacommon.h).
129 CAResult_t CAQueueingThreadDestroy(CAQueueingThread_t *thread);
135 #endif /* CA_QUEUEING_THREAD_H_ */