53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
#if !defined(DN_ASYNC_H)
|
|
#define DN_ASYNC_H
|
|
|
|
#include "../dn_base_inc.h"
|
|
#include "../dn_os_inc.h"
|
|
|
|
enum DN_ASYNCPriority
|
|
{
|
|
DN_ASYNCPriority_Low,
|
|
DN_ASYNCPriority_High,
|
|
DN_ASYNCPriority_Count,
|
|
};
|
|
|
|
struct DN_ASYNCCore
|
|
{
|
|
DN_OSMutex ring_mutex;
|
|
DN_OSConditionVariable ring_write_cv;
|
|
DN_OSSemaphore worker_sem;
|
|
DN_Ring ring;
|
|
DN_OSThread *threads;
|
|
DN_U32 thread_count;
|
|
DN_U32 busy_threads;
|
|
DN_U32 join_threads;
|
|
};
|
|
|
|
typedef void(DN_ASYNCWorkFunc)(void *input);
|
|
|
|
struct DN_ASYNCWork
|
|
{
|
|
DN_ASYNCWorkFunc *func;
|
|
void *input;
|
|
void *output;
|
|
};
|
|
|
|
struct DN_ASYNCJob
|
|
{
|
|
DN_ASYNCWork work;
|
|
DN_OSSemaphore completion_sem;
|
|
};
|
|
|
|
struct DN_ASYNCTask
|
|
{
|
|
DN_ASYNCWork work;
|
|
};
|
|
|
|
DN_API void DN_ASYNC_Init (DN_ASYNCCore *async, char *base, DN_USize base_size, DN_OSThread *threads, DN_U32 threads_size);
|
|
DN_API void DN_ASYNC_Deinit (DN_ASYNCCore *async);
|
|
DN_API bool DN_ASYNC_QueueWork(DN_ASYNCCore *async, DN_ASYNCWorkFunc *func, void *input, DN_U64 wait_time_ms);
|
|
DN_API DN_OSSemaphore DN_ASYNC_QueueTask(DN_ASYNCCore *async, DN_ASYNCWorkFunc *func, void *input, DN_U64 wait_time_ms);
|
|
DN_API void DN_ASYNC_WaitTask (DN_OSSemaphore *sem, DN_U32 timeout_ms);
|
|
|
|
#endif // DN_ASYNC_H
|