blob: bbc5e6c6b4da1b02781549256953cbc55f2bd74e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#pragma once
#include "api_threadpool.h"
#include <map>
#include <deque>
#include "../AutoLock.h"
class ThreadFunctions
{
public:
struct Data
{
api_threadpool::ThreadPoolFunc func;
void *user_data;
intptr_t id;
};
ThreadFunctions(int create_function_list=1);
~ThreadFunctions();
void Add(HANDLE handle, api_threadpool::ThreadPoolFunc func, void *user_data, intptr_t id);
bool Get(HANDLE handle, api_threadpool::ThreadPoolFunc *func, void **user_data, intptr_t *id);
void QueueFunction(api_threadpool::ThreadPoolFunc func, void *user_data, intptr_t id);
bool PopFunction(api_threadpool::ThreadPoolFunc *func, void **user_data, intptr_t *id);
typedef std::map<HANDLE, const ThreadFunctions::Data*> DataMap;
DataMap data;
Nullsoft::Utility::LockGuard guard;
typedef std::deque<ThreadFunctions::Data*> FuncList;
FuncList functions_list;
CRITICAL_SECTION functions_guard;
HANDLE functions_semaphore;
};
|