Mercurial
view seobeo/seobeo_worker.h @ 272:41a49c29a28f
polish JRPG conversation experience
Integrate desktop conversations into the utility panel, simplify the mobile frame, add modal destinations and a reusable Zenbu composer lab, and preserve explicit conversation resume behavior.
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Fri, 07 Aug 2026 16:05:29 -0700 |
| parents | 745fd127b2a1 |
| children |
line wrap: on
line source
#ifndef SEOBEO_WORKER_H #define SEOBEO_WORKER_H #include "dowa/dowa.h" typedef void (*Seobeo_Work_Function)(void *p_context); typedef void (*Seobeo_Work_Cleanup)(void *p_context); typedef enum { SEOBEO_WORKER_OK = 0, SEOBEO_WORKER_INVALID_ARGUMENT, SEOBEO_WORKER_OUT_OF_MEMORY, SEOBEO_WORKER_THREAD_ERROR, SEOBEO_WORKER_QUEUE_FULL, SEOBEO_WORKER_STOPPED, } Seobeo_Worker_Result; typedef struct Seobeo_Thread Seobeo_Thread; typedef struct Seobeo_Worker_Pool Seobeo_Worker_Pool; /* * Start one joinable task. Join consumes and destroys the thread handle. * The optional cleanup function runs after the work function. */ Seobeo_Thread *Seobeo_Thread_Start( Seobeo_Work_Function function, void *p_context, Seobeo_Work_Cleanup cleanup); Seobeo_Worker_Result Seobeo_Thread_Join(Seobeo_Thread *p_thread); /* * Start a detached task. On success, Seobeo owns the context until the work * and optional cleanup functions finish. */ Seobeo_Worker_Result Seobeo_Thread_Start_Detached( Seobeo_Work_Function function, void *p_context, Seobeo_Work_Cleanup cleanup); uint64 Seobeo_Thread_Current_Id(void); /* * Create a bounded reusable pool. Submit is non-blocking and transfers context * ownership only when it returns SEOBEO_WORKER_OK. */ Seobeo_Worker_Pool *Seobeo_Worker_Pool_Create( uint32 worker_count, uint32 queue_capacity); Seobeo_Worker_Result Seobeo_Worker_Pool_Submit( Seobeo_Worker_Pool *p_pool, Seobeo_Work_Function function, void *p_context, Seobeo_Work_Cleanup cleanup); Seobeo_Worker_Result Seobeo_Worker_Pool_Wait( Seobeo_Worker_Pool *p_pool); /* * Stop accepting work. When drain is TRUE, queued tasks finish. When FALSE, * queued tasks are discarded and their cleanup functions run. * Wait, Shutdown, and Destroy must not be called from a task or cleanup * callback belonging to the same pool. Wait and Shutdown reject those calls; * Destroy leaves the pool unchanged. */ Seobeo_Worker_Result Seobeo_Worker_Pool_Shutdown( Seobeo_Worker_Pool *p_pool, boolean drain); void Seobeo_Worker_Pool_Destroy(Seobeo_Worker_Pool *p_pool); uint32 Seobeo_Worker_Pool_Pending(Seobeo_Worker_Pool *p_pool); uint32 Seobeo_Worker_Pool_Active(Seobeo_Worker_Pool *p_pool); #endif