1484543d1Sopenharmony_ci/* 2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License. 5484543d1Sopenharmony_ci * You may obtain a copy of the License at 6484543d1Sopenharmony_ci * 7484543d1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8484543d1Sopenharmony_ci * 9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and 13484543d1Sopenharmony_ci * limitations under the License. 14484543d1Sopenharmony_ci */ 15484543d1Sopenharmony_ci 16484543d1Sopenharmony_ci/** 17484543d1Sopenharmony_ci * @addtogroup Ffrt 18484543d1Sopenharmony_ci * @{ 19484543d1Sopenharmony_ci * 20484543d1Sopenharmony_ci * @brief ffrt provides APIs. 21484543d1Sopenharmony_ci * 22484543d1Sopenharmony_ci * 23484543d1Sopenharmony_ci * @syscap SystemCapability.Resourceschedule.Ffrt.Core 24484543d1Sopenharmony_ci * 25484543d1Sopenharmony_ci * @since 10 26484543d1Sopenharmony_ci */ 27484543d1Sopenharmony_ci 28484543d1Sopenharmony_ci/** 29484543d1Sopenharmony_ci * @file queue.h 30484543d1Sopenharmony_ci * 31484543d1Sopenharmony_ci * @brief Declares the queue interfaces in C. 32484543d1Sopenharmony_ci * 33484543d1Sopenharmony_ci * @syscap SystemCapability.Resourceschedule.Ffrt.Core 34484543d1Sopenharmony_ci * @since 10 35484543d1Sopenharmony_ci * @version 1.0 36484543d1Sopenharmony_ci */ 37484543d1Sopenharmony_ci#ifndef FFRT_API_C_QUEUE_H 38484543d1Sopenharmony_ci#define FFRT_API_C_QUEUE_H 39484543d1Sopenharmony_ci 40484543d1Sopenharmony_ci#include "type_def.h" 41484543d1Sopenharmony_ci 42484543d1Sopenharmony_citypedef enum { 43484543d1Sopenharmony_ci ffrt_queue_serial, 44484543d1Sopenharmony_ci ffrt_queue_concurrent, 45484543d1Sopenharmony_ci ffrt_queue_max 46484543d1Sopenharmony_ci} ffrt_queue_type_t; 47484543d1Sopenharmony_ci 48484543d1Sopenharmony_citypedef void* ffrt_queue_t; 49484543d1Sopenharmony_ci 50484543d1Sopenharmony_ci/** 51484543d1Sopenharmony_ci * @brief Initializes the queue attribute. 52484543d1Sopenharmony_ci * 53484543d1Sopenharmony_ci * @param attr Indicates a pointer to the queue attribute. 54484543d1Sopenharmony_ci * @return Returns <b>0</b> if the queue attribute is initialized; 55484543d1Sopenharmony_ci returns <b>-1</b> otherwise. 56484543d1Sopenharmony_ci * @since 10 57484543d1Sopenharmony_ci * @version 1.0 58484543d1Sopenharmony_ci */ 59484543d1Sopenharmony_ciFFRT_C_API int ffrt_queue_attr_init(ffrt_queue_attr_t* attr); 60484543d1Sopenharmony_ci 61484543d1Sopenharmony_ci/** 62484543d1Sopenharmony_ci * @brief Destroys a queue attribute. 63484543d1Sopenharmony_ci * 64484543d1Sopenharmony_ci * @param attr Indicates a pointer to the queue attribute. 65484543d1Sopenharmony_ci * @since 10 66484543d1Sopenharmony_ci * @version 1.0 67484543d1Sopenharmony_ci */ 68484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_attr_destroy(ffrt_queue_attr_t* attr); 69484543d1Sopenharmony_ci 70484543d1Sopenharmony_ci/** 71484543d1Sopenharmony_ci * @brief Sets the QoS for a queue attribute. 72484543d1Sopenharmony_ci * 73484543d1Sopenharmony_ci * @param attr Indicates a pointer to the queue attribute. 74484543d1Sopenharmony_ci * @param attr Indicates the QoS. 75484543d1Sopenharmony_ci * @since 10 76484543d1Sopenharmony_ci * @version 1.0 77484543d1Sopenharmony_ci */ 78484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_attr_set_qos(ffrt_queue_attr_t* attr, ffrt_qos_t qos); 79484543d1Sopenharmony_ci 80484543d1Sopenharmony_ci/** 81484543d1Sopenharmony_ci * @brief Obtains the QoS of a queue attribute. 82484543d1Sopenharmony_ci * 83484543d1Sopenharmony_ci * @param attr Indicates a pointer to the queue attribute. 84484543d1Sopenharmony_ci * @return Returns the QoS. 85484543d1Sopenharmony_ci * @since 10 86484543d1Sopenharmony_ci * @version 1.0 87484543d1Sopenharmony_ci */ 88484543d1Sopenharmony_ciFFRT_C_API ffrt_qos_t ffrt_queue_attr_get_qos(const ffrt_queue_attr_t* attr); 89484543d1Sopenharmony_ci 90484543d1Sopenharmony_ci/** 91484543d1Sopenharmony_ci * @brief Set the serial queue task execution timeout. 92484543d1Sopenharmony_ci * 93484543d1Sopenharmony_ci * @param attr Serial Queue Property Pointer. 94484543d1Sopenharmony_ci * @param timeout_us Serial queue task execution timeout. 95484543d1Sopenharmony_ci * @since 10 96484543d1Sopenharmony_ci * @version 1.0 97484543d1Sopenharmony_ci */ 98484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_attr_set_timeout(ffrt_queue_attr_t* attr, uint64_t timeout_us); 99484543d1Sopenharmony_ci 100484543d1Sopenharmony_ci/** 101484543d1Sopenharmony_ci * @brief Get the serial queue task execution timeout. 102484543d1Sopenharmony_ci * 103484543d1Sopenharmony_ci * @param attr Serial Queue Property Pointer. 104484543d1Sopenharmony_ci * @return Returns the serial queue task execution timeout. 105484543d1Sopenharmony_ci * @since 10 106484543d1Sopenharmony_ci * @version 1.0 107484543d1Sopenharmony_ci */ 108484543d1Sopenharmony_ciFFRT_C_API uint64_t ffrt_queue_attr_get_timeout(const ffrt_queue_attr_t* attr); 109484543d1Sopenharmony_ci 110484543d1Sopenharmony_ci/** 111484543d1Sopenharmony_ci * @brief Set the serial queue timeout callback function. 112484543d1Sopenharmony_ci * 113484543d1Sopenharmony_ci * @param attr Serial Queue Property Pointer. 114484543d1Sopenharmony_ci * @param f Serial queue timeout callback function. 115484543d1Sopenharmony_ci * @since 10 116484543d1Sopenharmony_ci * @version 1.0 117484543d1Sopenharmony_ci */ 118484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_attr_set_callback(ffrt_queue_attr_t* attr, ffrt_function_header_t* f); 119484543d1Sopenharmony_ci 120484543d1Sopenharmony_ci/** 121484543d1Sopenharmony_ci * @brief Get the serial queue task timeout callback function. 122484543d1Sopenharmony_ci * 123484543d1Sopenharmony_ci * @param attr Serial Queue Property Pointer. 124484543d1Sopenharmony_ci * @return Returns the serial queue task timeout callback function. 125484543d1Sopenharmony_ci * @since 10 126484543d1Sopenharmony_ci * @version 1.0 127484543d1Sopenharmony_ci */ 128484543d1Sopenharmony_ciFFRT_C_API ffrt_function_header_t* ffrt_queue_attr_get_callback(const ffrt_queue_attr_t* attr); 129484543d1Sopenharmony_ci 130484543d1Sopenharmony_ci/** 131484543d1Sopenharmony_ci * @brief Set the queue max concurrency. 132484543d1Sopenharmony_ci * 133484543d1Sopenharmony_ci * @param attr Queue Property Pointer. 134484543d1Sopenharmony_ci * @param max_concurrency queue max_concurrency. 135484543d1Sopenharmony_ci * @since 12 136484543d1Sopenharmony_ci * @version 1.0 137484543d1Sopenharmony_ci */ 138484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_attr_set_max_concurrency(ffrt_queue_attr_t* attr, const int max_concurrency); 139484543d1Sopenharmony_ci 140484543d1Sopenharmony_ci/** 141484543d1Sopenharmony_ci * @brief Get the queue max concurrency. 142484543d1Sopenharmony_ci * 143484543d1Sopenharmony_ci * @param attr Queue Property Pointer. 144484543d1Sopenharmony_ci * @return Returns the queue max concurrency. 145484543d1Sopenharmony_ci * @since 12 146484543d1Sopenharmony_ci * @version 1.0 147484543d1Sopenharmony_ci */ 148484543d1Sopenharmony_ciFFRT_C_API int ffrt_queue_attr_get_max_concurrency(const ffrt_queue_attr_t* attr); 149484543d1Sopenharmony_ci 150484543d1Sopenharmony_ci/** 151484543d1Sopenharmony_ci * @brief Creates a queue. 152484543d1Sopenharmony_ci * 153484543d1Sopenharmony_ci * @param type Indicates the queue type. 154484543d1Sopenharmony_ci * @param name Indicates a pointer to the queue name. 155484543d1Sopenharmony_ci * @param attr Indicates a pointer to the queue attribute. 156484543d1Sopenharmony_ci * @return Returns a non-null queue handle if the queue is created; 157484543d1Sopenharmony_ci returns a null pointer otherwise. 158484543d1Sopenharmony_ci * @since 10 159484543d1Sopenharmony_ci * @version 1.0 160484543d1Sopenharmony_ci */ 161484543d1Sopenharmony_ciFFRT_C_API ffrt_queue_t ffrt_queue_create(ffrt_queue_type_t type, const char* name, const ffrt_queue_attr_t* attr); 162484543d1Sopenharmony_ci 163484543d1Sopenharmony_ci/** 164484543d1Sopenharmony_ci * @brief Destroys a queue. 165484543d1Sopenharmony_ci * 166484543d1Sopenharmony_ci * @param queue Indicates a queue handle. 167484543d1Sopenharmony_ci * @since 10 168484543d1Sopenharmony_ci * @version 1.0 169484543d1Sopenharmony_ci */ 170484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_destroy(ffrt_queue_t queue); 171484543d1Sopenharmony_ci 172484543d1Sopenharmony_ci/** 173484543d1Sopenharmony_ci * @brief Submits a task to a queue. 174484543d1Sopenharmony_ci * 175484543d1Sopenharmony_ci * @param queue Indicates a queue handle. 176484543d1Sopenharmony_ci * @param f Indicates a pointer to the task executor. 177484543d1Sopenharmony_ci * @param attr Indicates a pointer to the task attribute. 178484543d1Sopenharmony_ci * @since 10 179484543d1Sopenharmony_ci * @version 1.0 180484543d1Sopenharmony_ci */ 181484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_submit(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr); 182484543d1Sopenharmony_ci 183484543d1Sopenharmony_ci/** 184484543d1Sopenharmony_ci * @brief Submits a task to the queue, and obtains a task handle. 185484543d1Sopenharmony_ci * 186484543d1Sopenharmony_ci * @param queue Indicates a queue handle. 187484543d1Sopenharmony_ci * @param f Indicates a pointer to the task executor. 188484543d1Sopenharmony_ci * @param attr Indicates a pointer to the task attribute. 189484543d1Sopenharmony_ci * @return Returns a non-null task handle if the task is submitted; 190484543d1Sopenharmony_ci returns a null pointer otherwise. 191484543d1Sopenharmony_ci * @since 10 192484543d1Sopenharmony_ci * @version 1.0 193484543d1Sopenharmony_ci */ 194484543d1Sopenharmony_ciFFRT_C_API ffrt_task_handle_t ffrt_queue_submit_h( 195484543d1Sopenharmony_ci ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr); 196484543d1Sopenharmony_ci 197484543d1Sopenharmony_ci/** 198484543d1Sopenharmony_ci * @brief Waits until a task in the queue is complete. 199484543d1Sopenharmony_ci * 200484543d1Sopenharmony_ci * @param handle Indicates a task handle. 201484543d1Sopenharmony_ci * @since 10 202484543d1Sopenharmony_ci * @version 1.0 203484543d1Sopenharmony_ci */ 204484543d1Sopenharmony_ciFFRT_C_API void ffrt_queue_wait(ffrt_task_handle_t handle); 205484543d1Sopenharmony_ci 206484543d1Sopenharmony_ci/** 207484543d1Sopenharmony_ci * @brief Cancels a task in the queue. 208484543d1Sopenharmony_ci * 209484543d1Sopenharmony_ci * @param handle Indicates a task handle. 210484543d1Sopenharmony_ci * @return Returns <b>0</b> if the task is canceled; 211484543d1Sopenharmony_ci returns <b>-1</b> otherwise. 212484543d1Sopenharmony_ci * @since 10 213484543d1Sopenharmony_ci * @version 1.0 214484543d1Sopenharmony_ci */ 215484543d1Sopenharmony_ciFFRT_C_API int ffrt_queue_cancel(ffrt_task_handle_t handle); 216484543d1Sopenharmony_ci 217484543d1Sopenharmony_ci/** 218484543d1Sopenharmony_ci * @brief Get application main thread queue. 219484543d1Sopenharmony_ci * 220484543d1Sopenharmony_ci * @return Returns application main thread queue. 221484543d1Sopenharmony_ci * @since 12 222484543d1Sopenharmony_ci * @version 1.0 223484543d1Sopenharmony_ci */ 224484543d1Sopenharmony_ciFFRT_C_API ffrt_queue_t ffrt_get_main_queue(); 225484543d1Sopenharmony_ci 226484543d1Sopenharmony_ci/** 227484543d1Sopenharmony_ci * @brief Get application worker(ArkTs) thread queue. 228484543d1Sopenharmony_ci * 229484543d1Sopenharmony_ci * @return Returns application worker(ArkTs) thread queue. 230484543d1Sopenharmony_ci * @since 12 231484543d1Sopenharmony_ci * @version 1.0 232484543d1Sopenharmony_ci */ 233484543d1Sopenharmony_ciFFRT_C_API ffrt_queue_t ffrt_get_current_queue(); 234484543d1Sopenharmony_ci 235484543d1Sopenharmony_ci#endif // FFRT_API_C_QUEUE_H