Mercurial > hg > pub > prymula > com
diff DPF-Prymula-audioplugins/dpf/distrho/src/clap/ext/thread-check.h @ 3:84e66ea83026
DPF-Prymula-audioplugins-0.231015-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Mon, 16 Oct 2023 21:53:34 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DPF-Prymula-audioplugins/dpf/distrho/src/clap/ext/thread-check.h Mon Oct 16 21:53:34 2023 +0200 @@ -0,0 +1,51 @@ +#pragma once + +#include "../plugin.h" + +static CLAP_CONSTEXPR const char CLAP_EXT_THREAD_CHECK[] = "clap.thread-check"; + +#ifdef __cplusplus +extern "C" { +#endif + +/// @page thread-check +/// +/// CLAP defines two symbolic threads: +/// +/// main-thread: +/// This is the thread in which most of the interaction between the plugin and host happens. +/// It is usually the thread on which the GUI receives its events. +/// It isn't a realtime thread, yet this thread needs to respond fast enough to user interaction, +/// so it is recommended to run long and expensive tasks such as preset indexing or asset loading +/// in dedicated background threads. +/// +/// audio-thread: +/// This thread is used for realtime audio processing. Its execution should be as deterministic +/// as possible to meet the audio interface's deadline (can be <1ms). In other words, there is a +/// known set of operations that should be avoided: malloc() and free(), mutexes (spin mutexes +/// are worse), I/O, waiting, ... +/// The audio-thread is something symbolic, there isn't one OS thread that remains the +/// audio-thread for the plugin lifetime. As you may guess, the host is likely to have a +/// thread pool and the plugin.process() call may be scheduled on different OS threads over time. +/// The most important thing is that there can't be two audio-threads at the same time. All the +/// functions marked with [audio-thread] **ARE NOT CONCURRENT**. The host may mark any OS thread, +/// including the main-thread as the audio-thread, as long as it can guarentee that only one OS +/// thread is the audio-thread at a time. The audio-thread can be seen as a concurrency guard for +/// all functions marked with [audio-thread]. + +// This interface is useful to do runtime checks and make +// sure that the functions are called on the correct threads. +// It is highly recommended that hosts implement this extension. +typedef struct clap_host_thread_check { + // Returns true if "this" thread is the main thread. + // [thread-safe] + bool(CLAP_ABI *is_main_thread)(const clap_host_t *host); + + // Returns true if "this" thread is one of the audio threads. + // [thread-safe] + bool(CLAP_ABI *is_audio_thread)(const clap_host_t *host); +} clap_host_thread_check_t; + +#ifdef __cplusplus +} +#endif