69 lines
2.0 KiB
C++
69 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "il2cpp-config.h"
|
|
struct Il2CppObject;
|
|
struct Il2CppDelegate;
|
|
struct Il2CppAsyncResult;
|
|
|
|
#if NET_4_0
|
|
|
|
/* Keep in sync with System.IOOperation in mcs/class/System/System/IOSelector.cs */
|
|
enum Il2CppIOOperation
|
|
{
|
|
EVENT_IN = 1 << 0,
|
|
EVENT_OUT = 1 << 1,
|
|
EVENT_ERR = 1 << 2, /* not in managed */
|
|
};
|
|
|
|
#endif
|
|
|
|
namespace il2cpp
|
|
{
|
|
namespace vm
|
|
{
|
|
class LIBIL2CPP_CODEGEN_API ThreadPool
|
|
{
|
|
public:
|
|
|
|
struct Configuration
|
|
{
|
|
int minThreads;
|
|
int maxThreads;
|
|
int minAsyncIOThreads;
|
|
int maxAsyncIOThreads;
|
|
|
|
// These are read-only.
|
|
int availableThreads;
|
|
int availableAsyncIOThreads;
|
|
};
|
|
|
|
#if NET_4_0
|
|
typedef struct
|
|
{
|
|
bool(*init)(int wakeup_pipe_fd);
|
|
void(*register_fd)(int fd, int events, bool is_new);
|
|
void(*remove_fd)(int fd);
|
|
int(*event_wait)(void(*callback)(int fd, int events, void* user_data), void* user_data);
|
|
} ThreadPoolIOBackend;
|
|
#endif
|
|
|
|
static void Initialize();
|
|
static void Shutdown();
|
|
|
|
/// On a thread, call the given delegate with 'params' as arguments. Upon completion,
|
|
/// call 'asyncCallback'.
|
|
static Il2CppAsyncResult* Queue(Il2CppDelegate* delegate, void** params, Il2CppDelegate* asyncCallback, Il2CppObject* state);
|
|
|
|
/// Wait for the execution of the given asynchronous call to have completed and return
|
|
/// the value returned by the delegate wrapped in the call (or null if the delegate has
|
|
/// a void return type).
|
|
/// NOTE: Any AsyncResult can only be waited on once! Repeated or concurrent calls to Wait() on the same AsyncResult
|
|
/// will throw InvalidOperationExceptions.
|
|
static Il2CppObject* Wait(Il2CppAsyncResult* asyncResult, void** outArgs);
|
|
|
|
static Configuration GetConfiguration();
|
|
static void SetConfiguration(const Configuration& configuration);
|
|
};
|
|
} /* namespace vm */
|
|
} /* namespace il2cpp */
|