Initial release

This commit is contained in:
civ
2026-08-16 18:24:52 +07:00
commit 876886a39a
13244 changed files with 2353959 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
// 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