annotate seobeo/seobeo_worker.h @ 252:7a7581f040e8

[ui] Add scoped notification component Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Tue, 04 Aug 2026 11:57:16 -0700
parents 745fd127b2a1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
250
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 #ifndef SEOBEO_WORKER_H
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2 #define SEOBEO_WORKER_H
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
4 #include "dowa/dowa.h"
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6 typedef void (*Seobeo_Work_Function)(void *p_context);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
7 typedef void (*Seobeo_Work_Cleanup)(void *p_context);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
9 typedef enum {
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
10 SEOBEO_WORKER_OK = 0,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 SEOBEO_WORKER_INVALID_ARGUMENT,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
12 SEOBEO_WORKER_OUT_OF_MEMORY,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
13 SEOBEO_WORKER_THREAD_ERROR,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14 SEOBEO_WORKER_QUEUE_FULL,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15 SEOBEO_WORKER_STOPPED,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16 } Seobeo_Worker_Result;
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
17
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
18 typedef struct Seobeo_Thread Seobeo_Thread;
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
19 typedef struct Seobeo_Worker_Pool Seobeo_Worker_Pool;
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
20
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21 /*
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22 * Start one joinable task. Join consumes and destroys the thread handle.
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23 * The optional cleanup function runs after the work function.
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
24 */
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
25 Seobeo_Thread *Seobeo_Thread_Start(
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
26 Seobeo_Work_Function function,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
27 void *p_context,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
28 Seobeo_Work_Cleanup cleanup);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
29 Seobeo_Worker_Result Seobeo_Thread_Join(Seobeo_Thread *p_thread);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
30
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
31 /*
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
32 * Start a detached task. On success, Seobeo owns the context until the work
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
33 * and optional cleanup functions finish.
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
34 */
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
35 Seobeo_Worker_Result Seobeo_Thread_Start_Detached(
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
36 Seobeo_Work_Function function,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
37 void *p_context,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
38 Seobeo_Work_Cleanup cleanup);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
39
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
40 uint64 Seobeo_Thread_Current_Id(void);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
41
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42 /*
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43 * Create a bounded reusable pool. Submit is non-blocking and transfers context
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
44 * ownership only when it returns SEOBEO_WORKER_OK.
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
45 */
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
46 Seobeo_Worker_Pool *Seobeo_Worker_Pool_Create(
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
47 uint32 worker_count,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
48 uint32 queue_capacity);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49 Seobeo_Worker_Result Seobeo_Worker_Pool_Submit(
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50 Seobeo_Worker_Pool *p_pool,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51 Seobeo_Work_Function function,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52 void *p_context,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53 Seobeo_Work_Cleanup cleanup);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
54 Seobeo_Worker_Result Seobeo_Worker_Pool_Wait(
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
55 Seobeo_Worker_Pool *p_pool);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
57 /*
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
58 * Stop accepting work. When drain is TRUE, queued tasks finish. When FALSE,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 * queued tasks are discarded and their cleanup functions run.
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60 * Wait, Shutdown, and Destroy must not be called from a task or cleanup
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 * callback belonging to the same pool. Wait and Shutdown reject those calls;
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62 * Destroy leaves the pool unchanged.
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 */
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64 Seobeo_Worker_Result Seobeo_Worker_Pool_Shutdown(
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
65 Seobeo_Worker_Pool *p_pool,
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66 boolean drain);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 void Seobeo_Worker_Pool_Destroy(Seobeo_Worker_Pool *p_pool);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
69 uint32 Seobeo_Worker_Pool_Pending(Seobeo_Worker_Pool *p_pool);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
70 uint32 Seobeo_Worker_Pool_Active(Seobeo_Worker_Pool *p_pool);
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
71
745fd127b2a1 [seobeo] Add bounded worker interface
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
72 #endif