96 lines
3.1 KiB
C++
96 lines
3.1 KiB
C++
// This file is part of VSTGUI. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this
|
|
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
|
|
|
|
#pragma once
|
|
|
|
#include "platform/iplatformtaskexecutor.h"
|
|
|
|
//------------------------------------------------------------------------
|
|
namespace VSTGUI {
|
|
/** Simple Task Concurrency API.
|
|
*
|
|
* The Task Concurrency API facilitates scheduling tasks for execution on background threads,
|
|
* either concurrently or sequentially. This API also enables the scheduling of tasks on the main
|
|
* thread from any other thread.
|
|
*
|
|
* This API can be used while the VSTGUI library is initialized. Upon deinitialization, triggered
|
|
* by the mandatory exit() call, this API ensures that all scheduled tasks are completed prior to
|
|
* returning.
|
|
*
|
|
* Please note that once a task has been dispatched, it cannot be canceled.
|
|
*/
|
|
namespace Tasks {
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Get the main/UI serial queue.
|
|
*
|
|
* Tasks scheduled on this queue are performed sequentially on the main/ui thread.
|
|
*
|
|
* Can be called from any thread.
|
|
*
|
|
* @return the shared main queue
|
|
*/
|
|
const Queue& mainQueue ();
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Get the background concurrent queue.
|
|
*
|
|
* Tasks scheduled on this queue are performed concurrently on background threads.
|
|
* The number of background threads depends on the system's CPU core count.
|
|
*
|
|
* Can be called from any thread.
|
|
*
|
|
* @return the shared background queue
|
|
*/
|
|
const Queue& backgroundQueue ();
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Make a new serial queue.
|
|
*
|
|
* Tasks scheduled on this queue are executed sequentially on a background thread.
|
|
*
|
|
* The caller owns the queue, and needs to release the queue via the releaseSerialQueue() function.
|
|
*
|
|
* Can be called from any thread.
|
|
*
|
|
* @param name the name of the serial queue (optional)
|
|
* @return a new serial queue
|
|
*/
|
|
Queue makeSerialQueue (const char* name);
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Release a serial queue
|
|
*
|
|
* This function will block until all tasks of the queue were executed.
|
|
*
|
|
* Can be called from any thread.
|
|
*
|
|
* @param queue the queue which to release
|
|
*/
|
|
void releaseSerialQueue (const Queue& queue);
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Schedule a task to be executed asynchronously on a queue.
|
|
*
|
|
* Can be called from any thread, but should not be called from realtime constraint threads as it
|
|
* may involves locks and memory allocations
|
|
*
|
|
* @param queue on which queue to perform the task
|
|
* @param task task to be performed
|
|
*/
|
|
void schedule (const Queue& queue, Task&& task);
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Wait for all tasks in the queue to complete execution.
|
|
*
|
|
* Can only be called from the main thread.
|
|
*
|
|
* @param queue on which queue to perform the task
|
|
*/
|
|
void waitAllTasksExecuted (const Queue& queue);
|
|
|
|
//------------------------------------------------------------------------
|
|
} // Tasks
|
|
} // VSTGUI
|