annotate foosdk/sdk/foobar2000/SDK/threadsLite.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //! pfc::splitThread() + async_task_manager::acquire
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 void splitTask(std::function<void()>);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 void splitTask(pfc::thread::arg_t const&, std::function<void()>);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 abort_callback& mainAborter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 void inCpuWorkerThread(std::function<void()> f);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 // ======================================================================================================
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 // Most of main_thread_callback.h declares API internals and obsolete helpers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 // In modern code, simply use fb2k::inMainThread() declared below and disregard the rest.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 // ======================================================================================================
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 //! Queue a call in main thread. Returns immediately. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 //! You can call this from any thread, including main thread - to execute some code outside the current call stack / global fb2k callbacks / etc. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 //! Guaranteed FIFO order of execution. See also: main_thread_callback::add_callback().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 void inMainThread(std::function<void() > f);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 //! Call f synchronously if called from main thread, queue call if called from another.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 void inMainThread2(std::function<void() > f);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 //! Clone abort_callback, suppress call if original abort_callback becomes set prior to reaching main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 void inMainThread(std::function<void() > f, abort_callback&);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 //! Synchronous / abortable version. May exit *before* f() finishes, if abort becomes set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 void inMainThreadSynchronous(std::function<void() > f, abort_callback& abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 //! Synchronous blocking version. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 //! Uses new foobar2000 v2.0 methods if available, synchronizing to main thread via SendMessage(). \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 //! Introduced to help recovering from method-called-from-wrong-context scenarios. Does *not* guarentee FIFO execution order contrary to plain inMainThread().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 void inMainThreadSynchronous2(std::function<void() > f);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 //! Helper class for threads that call fb2k objects. Mainly needed for Android shims. You can safely ignore this. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 //! Guaranteed to have startHere(), isActive() and waitTillDone() methods only.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 typedef pfc::thread2 thread;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 }