1# queue.h 2 3<!--Kit: Function Flow Runtime Kit--> 4<!--Subsystem: Resourceschedule--> 5<!--Owner: @chuchihtung; @yanleo--> 6<!--Designer: @geoffrey_guo; @huangyouzhong--> 7<!--Tester: @lotsof; @sunxuhao--> 8<!--Adviser: @foryourself--> 9 10## 概述 11 12声明队列的C接口。 13 14**引用文件:** <ffrt/queue.h> 15 16**库:** libffrt.z.so 17 18**系统能力:** SystemCapability.Resourceschedule.Ffrt.Core 19 20**起始版本:** 10 21 22**相关模块:** [FFRT](capi-ffrt.md) 23 24## 汇总 25 26### 结构体 27 28| 名称 | 描述 | 29|------------------|--| 30| [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) | 队列句柄。 | 31 32### 枚举 33 34| 名称 | typedef关键字 | 描述 | 35| -- | -- | -- | 36| [ffrt_queue_type_t](#ffrt_queue_type_t) | ffrt_queue_type_t | 队列类型。 | 37 38### 函数 39 40| 名称 | 描述 | 41| -- | -- | 42| [FFRT_C_API int ffrt_queue_attr_init(ffrt_queue_attr_t* attr)](#ffrt_queue_attr_init) | 初始化队列属性。 | 43| [FFRT_C_API void ffrt_queue_attr_destroy(ffrt_queue_attr_t* attr)](#ffrt_queue_attr_destroy) | 销毁队列属性。 | 44| [FFRT_C_API void ffrt_queue_attr_set_qos(ffrt_queue_attr_t* attr, ffrt_qos_t qos)](#ffrt_queue_attr_set_qos) | 设置队列QoS属性。 | 45| [FFRT_C_API ffrt_qos_t ffrt_queue_attr_get_qos(const ffrt_queue_attr_t* attr)](#ffrt_queue_attr_get_qos) | 获取队列QoS属性。 | 46| [FFRT_C_API void ffrt_queue_attr_set_timeout(ffrt_queue_attr_t* attr, uint64_t timeout_us)](#ffrt_queue_attr_set_timeout) | 设置串行队列timeout属性。超时时间的最小值是1ms,如果设置的值小于1ms,那么超时时间被设置为1ms。 | 47| [FFRT_C_API uint64_t ffrt_queue_attr_get_timeout(const ffrt_queue_attr_t* attr)](#ffrt_queue_attr_get_timeout) | 获取串行队列任务执行的timeout时间。 | 48| [FFRT_C_API void ffrt_queue_attr_set_callback(ffrt_queue_attr_t* attr, ffrt_function_header_t* f)](#ffrt_queue_attr_set_callback) | 设置串行队列超时回调方法。 | 49| [FFRT_C_API ffrt_function_header_t* ffrt_queue_attr_get_callback(const ffrt_queue_attr_t* attr)](#ffrt_queue_attr_get_callback) | 获取串行队列超时回调方法。 | 50| [FFRT_C_API void ffrt_queue_attr_set_max_concurrency(ffrt_queue_attr_t* attr, const int max_concurrency)](#ffrt_queue_attr_set_max_concurrency) | 设置并行队列最大并发度。 | 51| [FFRT_C_API int ffrt_queue_attr_get_max_concurrency(const ffrt_queue_attr_t* attr)](#ffrt_queue_attr_get_max_concurrency) | 获取并行队列最大并发度。 | 52| [FFRT_C_API void ffrt_queue_attr_set_thread_mode(ffrt_queue_attr_t* attr, bool mode)](#ffrt_queue_attr_set_thread_mode) | 设置队列中的任务是以协程模式还是以线程模式运行。默认以协程模式运行。 | 53| [FFRT_C_API bool ffrt_queue_attr_get_thread_mode(const ffrt_queue_attr_t* attr)](#ffrt_queue_attr_get_thread_mode) | 获取队列中的任务是以协程模式还是以线程模式运行。 | 54| [FFRT_C_API ffrt_queue_t ffrt_queue_create(ffrt_queue_type_t type, const char* name, const ffrt_queue_attr_t* attr)](#ffrt_queue_create) | 创建队列。 | 55| [FFRT_C_API void ffrt_queue_destroy(ffrt_queue_t queue)](#ffrt_queue_destroy) | 销毁队列。 | 56| [FFRT_C_API void ffrt_queue_submit(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr)](#ffrt_queue_submit) | 提交一个任务到队列中调度执行。 | 57| [FFRT_C_API ffrt_task_handle_t ffrt_queue_submit_h(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr)](#ffrt_queue_submit_h) | 提交一个任务到队列中调度执行,并返回任务句柄。 | 58| [FFRT_C_API void ffrt_queue_submit_f(ffrt_queue_t queue, ffrt_function_t func, void* arg, const ffrt_task_attr_t* attr)](#ffrt_queue_submit_f) | 提交一个任务到队列中调度执行,是ffrt_queue_submit接口的简化包装形式。该接口假定任务不需要销毁回调函数,给定的任务函数和参数被包装为队列任务结构,并将封装后的任务结构和其他参数传递给ffrt_queue_submit接口。 | 59| [FFRT_C_API ffrt_task_handle_t ffrt_queue_submit_h_f(ffrt_queue_t queue, ffrt_function_t func, void* arg, const ffrt_task_attr_t* attr)](#ffrt_queue_submit_h_f) | 提交一个任务到队列中调度执行,并返回任务句柄,是ffrt_queue_submit_h接口的简化包装形式。该接口假定任务不需要销毁回调函数,给定的任务函数和参数被包装为队列任务结构,并将封装后的任务结构和其他参数传递给ffrt_queue_submit_h接口。 | 60| [FFRT_C_API void ffrt_queue_wait(ffrt_task_handle_t handle)](#ffrt_queue_wait) | 等待队列中一个任务执行完成。 | 61| [FFRT_C_API int ffrt_queue_cancel(ffrt_task_handle_t handle)](#ffrt_queue_cancel) | 取消队列中一个任务。 | 62| [FFRT_C_API ffrt_queue_t ffrt_get_main_queue(void)](#ffrt_get_main_queue) | 获取主线程队列。 | 63| [FFRT_C_API ffrt_queue_t ffrt_get_current_queue(void)](#ffrt_get_current_queue) | 获取应用Worker(ArkTs)线程队列。 | 64 65## 枚举类型说明 66 67### ffrt_queue_type_t 68 69``` 70enum ffrt_queue_type_t 71``` 72 73**描述** 74 75队列类型。 76 77**起始版本:** 12 78 79| 枚举项 | 描述 | 80| -- | -- | 81| ffrt_queue_serial | 串行队列 | 82| ffrt_queue_concurrent | 并行队列 | 83| ffrt_queue_max | 无效队列类型 | 84 85 86## 函数说明 87 88### ffrt_queue_attr_init() 89 90``` 91FFRT_C_API int ffrt_queue_attr_init(ffrt_queue_attr_t* attr) 92``` 93 94**描述** 95 96初始化队列属性。 97 98**起始版本:** 10 99 100 101**参数:** 102 103| 参数项 | 描述 | 104| -- | -- | 105| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 106 107**返回:** 108 109| 类型 | 说明 | 110| -- | -- | 111| FFRT_C_API int | 执行成功时返回0,<br> 执行失败时返回-1。 | 112 113### ffrt_queue_attr_destroy() 114 115``` 116FFRT_C_API void ffrt_queue_attr_destroy(ffrt_queue_attr_t* attr) 117``` 118 119**描述** 120 121销毁队列属性。 122 123**起始版本:** 10 124 125 126**参数:** 127 128| 参数项 | 描述 | 129| -- | -- | 130| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 131 132### ffrt_queue_attr_set_qos() 133 134``` 135FFRT_C_API void ffrt_queue_attr_set_qos(ffrt_queue_attr_t* attr, ffrt_qos_t qos) 136``` 137 138**描述** 139 140设置队列QoS属性。 141 142**起始版本:** 10 143 144 145**参数:** 146 147| 参数项 | 描述 | 148|-----------------------------------------------------------| -- | 149| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 150| [ffrt_qos_t](capi-type-def-h.md#变量) qos | QoS属性值。 | 151 152### ffrt_queue_attr_get_qos() 153 154``` 155FFRT_C_API ffrt_qos_t ffrt_queue_attr_get_qos(const ffrt_queue_attr_t* attr) 156``` 157 158**描述** 159 160获取队列QoS属性。 161 162**起始版本:** 10 163 164 165**参数:** 166 167| 参数项 | 描述 | 168| -- | -- | 169| [const ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 170 171**返回:** 172 173| 类型 | 说明 | 174| -- | -- | 175| FFRT_C_API [ffrt_qos_t](capi-type-def-h.md#变量) | 返回队列的QoS属性。 | 176 177### ffrt_queue_attr_set_timeout() 178 179``` 180FFRT_C_API void ffrt_queue_attr_set_timeout(ffrt_queue_attr_t* attr, uint64_t timeout_us) 181``` 182 183**描述** 184 185设置串行队列timeout属性。超时时间的最小值是1ms,如果设置的值小于1ms,那么超时时间被设置为1ms。 186 187**起始版本:** 10 188 189 190**参数:** 191 192| 参数项 | 描述 | 193| -- | -- | 194| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 串行队列属性指针。 | 195| uint64_t timeout_us | 串行队列任务执行的timeout时间(微秒)。 | 196 197### ffrt_queue_attr_get_timeout() 198 199``` 200FFRT_C_API uint64_t ffrt_queue_attr_get_timeout(const ffrt_queue_attr_t* attr) 201``` 202 203**描述** 204 205获取串行队列任务执行的timeout时间。 206 207**起始版本:** 10 208 209 210**参数:** 211 212| 参数项 | 描述 | 213| -- | -- | 214| [const ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 串行队列属性指针。 | 215 216**返回:** 217 218| 类型 | 说明 | 219| -- | -- | 220| FFRT_C_API uint64_t | 返回串行队列任务执行的timeout时间。 | 221 222### ffrt_queue_attr_set_callback() 223 224``` 225FFRT_C_API void ffrt_queue_attr_set_callback(ffrt_queue_attr_t* attr, ffrt_function_header_t* f) 226``` 227 228**描述** 229 230设置串行队列超时回调方法。 231 232**起始版本:** 10 233 234 235**参数:** 236 237| 参数项 | 描述 | 238| -- | -- | 239| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 串行队列属性指针。 | 240| [ffrt_function_header_t](capi-ffrt-ffrt-function-header-t.md)* f | 超时回调方法执行体。 | 241 242### ffrt_queue_attr_get_callback() 243 244``` 245FFRT_C_API ffrt_function_header_t* ffrt_queue_attr_get_callback(const ffrt_queue_attr_t* attr) 246``` 247 248**描述** 249 250获取串行队列超时回调方法。 251 252**起始版本:** 10 253 254 255**参数:** 256 257| 参数项 | 描述 | 258| -- | -- | 259| [const ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 串行队列属性指针。 | 260 261**返回:** 262 263| 类型 | 说明 | 264|----------------------------------------| -- | 265| FFRT_C_API [ffrt_function_header_t](capi-ffrt-ffrt-function-header-t.md)* | 返回串行队列超时回调方法。 | 266 267### ffrt_queue_attr_set_max_concurrency() 268 269``` 270FFRT_C_API void ffrt_queue_attr_set_max_concurrency(ffrt_queue_attr_t* attr, const int max_concurrency) 271``` 272 273**描述** 274 275设置并行队列最大并发度。 276 277**起始版本:** 12 278 279 280**参数:** 281 282| 参数项 | 描述 | 283| -- | -- | 284| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 285| const int max_concurrency | 最大并发度。 | 286 287### ffrt_queue_attr_get_max_concurrency() 288 289``` 290FFRT_C_API int ffrt_queue_attr_get_max_concurrency(const ffrt_queue_attr_t* attr) 291``` 292 293**描述** 294 295获取并行队列最大并发度。 296 297**起始版本:** 12 298 299 300**参数:** 301 302| 参数项 | 描述 | 303| -- | -- | 304| [const ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 305 306**返回:** 307 308| 类型 | 说明 | 309| -- | -- | 310| FFRT_C_API int | 返回最大并发度。 | 311 312### ffrt_queue_attr_set_thread_mode() 313 314``` 315FFRT_C_API void ffrt_queue_attr_set_thread_mode(ffrt_queue_attr_t* attr, bool mode) 316``` 317 318**描述** 319 320设置队列中的任务是以协程模式还是以线程模式运行。默认以协程模式运行。 321 322**起始版本:** 20 323 324 325**参数:** 326 327| 参数项 | 描述 | 328| -- | -- | 329| [ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 330| bool mode | 设置队列任务运行方式。true表示以线程模式运行, false表示以协程方式运行。 | 331 332### ffrt_queue_attr_get_thread_mode() 333 334``` 335FFRT_C_API bool ffrt_queue_attr_get_thread_mode(const ffrt_queue_attr_t* attr) 336``` 337 338**描述** 339 340获取队列中的任务是以协程模式还是以线程模式运行。 341 342**起始版本:** 20 343 344 345**参数:** 346 347| 参数项 | 描述 | 348| -- | -- | 349| [const ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性指针。 | 350 351**返回:** 352 353| 类型 | 说明 | 354| -- | -- | 355| FFRT_C_API bool | true表示以线程模式运行,false表示以协程模式运行。 | 356 357### ffrt_queue_create() 358 359``` 360FFRT_C_API ffrt_queue_t ffrt_queue_create(ffrt_queue_type_t type, const char* name, const ffrt_queue_attr_t* attr) 361``` 362 363**描述** 364 365创建队列。 366 367**起始版本:** 10 368 369 370**参数:** 371 372| 参数项 | 描述 | 373| -- | -- | 374| [ffrt_queue_type_t](capi-queue-h.md#ffrt_queue_type_t) type | 队列类型。 | 375| const char* name | 队列名字。 | 376| [const ffrt_queue_attr_t](capi-ffrt-ffrt-queue-attr-t.md)* attr | 队列属性。 | 377 378**返回:** 379 380| 类型 | 说明 | 381|-----------------------------| -- | 382| FFRT_C_API [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) | 创建队列成功返回非空队列句柄,<br> 创建队列失败返回空指针。 | 383 384### ffrt_queue_destroy() 385 386``` 387FFRT_C_API void ffrt_queue_destroy(ffrt_queue_t queue) 388``` 389 390**描述** 391 392销毁队列。 393 394**起始版本:** 10 395 396 397**参数:** 398 399| 参数项 | 描述 | 400| -- | -- | 401| [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) queue | 队列句柄。 | 402 403### ffrt_queue_submit() 404 405``` 406FFRT_C_API void ffrt_queue_submit(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr) 407``` 408 409**描述** 410 411提交一个任务到队列中调度执行。 412 413**起始版本:** 10 414 415 416**参数:** 417 418| 参数项 | 描述 | 419| -- | -- | 420| [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) queue | 队列句柄。 | 421| [ffrt_function_header_t](capi-ffrt-ffrt-function-header-t.md)* f | 任务的执行体。 | 422| [const ffrt_task_attr_t](capi-ffrt-ffrt-task-attr-t.md)* attr | 任务属性。 | 423 424### ffrt_queue_submit_h() 425 426``` 427FFRT_C_API ffrt_task_handle_t ffrt_queue_submit_h(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr) 428``` 429 430**描述** 431 432提交一个任务到队列中调度执行,并返回任务句柄。 433 434**起始版本:** 10 435 436 437**参数:** 438 439| 参数项 | 描述 | 440| -- | -- | 441| [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) queue | 队列句柄。 | 442| [ffrt_function_header_t](capi-ffrt-ffrt-function-header-t.md)* f | 任务的执行体。 | 443| [const ffrt_task_attr_t](capi-ffrt-ffrt-task-attr-t.md)* attr | 任务属性。 | 444 445**返回:** 446 447| 类型 | 说明 | 448|-----------------------------------| -- | 449| FFRT_C_API [ffrt_task_handle_t](capi-ffrt-ffrt-task-handle-t.md) | 提交成功返回非空任务句柄,<br> 提交失败返回空指针。 | 450 451### ffrt_queue_submit_f() 452 453``` 454FFRT_C_API void ffrt_queue_submit_f(ffrt_queue_t queue, ffrt_function_t func, void* arg, const ffrt_task_attr_t* attr) 455``` 456 457**描述** 458 459提交一个任务到队列中调度执行,是ffrt_queue_submit接口的简化包装形式。该接口假定任务不需要销毁回调函数,给定的任务函数和参数被包装为队列任务结构,并将封装后的任务结构和其他参数传递给ffrt_queue_submit接口。 460 461**起始版本:** 20 462 463 464**参数:** 465 466| 参数项 | 描述 | 467| -- | -- | 468| [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) queue | 队列句柄。 | 469| [ffrt_function_t](capi-type-def-h.md#ffrt_function_t) func | 指定的任务函数。 | 470| void* arg | 传递给任务函数的参数。 | 471| [const ffrt_task_attr_t](capi-ffrt-ffrt-task-attr-t.md)* attr | 任务属性。 | 472 473**参考:** 474 475[ffrt_queue_submit](capi-queue-h.md#ffrt_queue_submit) 476 477 478### ffrt_queue_submit_h_f() 479 480``` 481FFRT_C_API ffrt_task_handle_t ffrt_queue_submit_h_f(ffrt_queue_t queue, ffrt_function_t func, void* arg, const ffrt_task_attr_t* attr) 482``` 483 484**描述** 485 486提交一个任务到队列中调度执行,并返回任务句柄,是ffrt_queue_submit_h接口的简化包装形式。该接口假定任务不需要销毁回调函数,给定的任务函数和参数被包装为队列任务结构,并将封装后的任务结构和其他参数传递给ffrt_queue_submit_h接口。 487 488**起始版本:** 20 489 490 491**参数:** 492 493| 参数项 | 描述 | 494| -- | -- | 495| [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) queue | 队列句柄。 | 496| [ffrt_function_t](capi-type-def-h.md#ffrt_function_t) func | 指定的任务函数。 | 497| void* arg | 传递给任务函数的参数。 | 498| [const ffrt_task_attr_t](capi-ffrt-ffrt-task-attr-t.md)* attr | 任务属性。 | 499 500**返回:** 501 502| 类型 | 说明 | 503| -- | -- | 504| FFRT_C_API [ffrt_task_handle_t](capi-ffrt-ffrt-task-handle-t.md) | 提交成功返回非空任务句柄,<br> 提交失败返回空指针。 | 505 506**参考:** 507 508[ffrt_queue_submit_h](capi-queue-h.md#ffrt_queue_submit_h) 509 510 511### ffrt_queue_wait() 512 513``` 514FFRT_C_API void ffrt_queue_wait(ffrt_task_handle_t handle) 515``` 516 517**描述** 518 519等待队列中一个任务执行完成。 520 521**起始版本:** 10 522 523 524**参数:** 525 526| 参数项 | 描述 | 527| -- | -- | 528| [ffrt_task_handle_t](capi-ffrt-ffrt-task-handle-t.md) handle | 任务句柄。 | 529 530### ffrt_queue_cancel() 531 532``` 533FFRT_C_API int ffrt_queue_cancel(ffrt_task_handle_t handle) 534``` 535 536**描述** 537 538取消队列中一个任务。 539 540**起始版本:** 10 541 542 543**参数:** 544 545| 参数项 | 描述 | 546| -- | -- | 547| [ffrt_task_handle_t](capi-ffrt-ffrt-task-handle-t.md) handle | 任务句柄。 | 548 549**返回:** 550 551| 类型 | 说明 | 552| -- | -- | 553| FFRT_C_API int | 取消任务成功返回0,<br> 取消任务失败返回-1。 | 554 555### ffrt_get_main_queue() 556 557``` 558FFRT_C_API ffrt_queue_t ffrt_get_main_queue(void) 559``` 560 561**描述** 562 563获取主线程队列。 564 565**起始版本:** 12 566 567**返回:** 568 569| 类型 | 说明 | 570| -- | -- | 571| FFRT_C_API [ffrt_queue_t](capi-ffrt-ffrt-queue-t.md) | 返回主线程队列句柄。 | 572 573### ffrt_get_current_queue() 574 575``` 576FFRT_C_API ffrt_queue_t ffrt_get_current_queue(void) 577``` 578 579**描述** 580 581获取应用Worker(ArkTs)线程队列。 582 583**起始版本:** 12 584 585**废弃版本:** 18 586 587**返回:** 588 589| 类型 | 说明 | 590| -- | -- | 591| FFRT_C_API ffrt_queue_t | 返回当前线程队列句柄。 | 592 593 594