Mercurial > hg > pub > prymula > com
view DPF-Prymula-audioplugins/dpf/distrho/src/clap/ext/thread-check.h @ 10:4dc186728822
immposiblerush-0.230919-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Sun, 04 Feb 2024 23:27:00 +0100 |
parents | 84e66ea83026 |
children |
line wrap: on
line source
#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