diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-09-06 21:15:32 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-09-06 21:15:32 -0400 |
| commit | f5e59b13b726a0d154dbe9351010ed3bd4b2b9e6 (patch) | |
| tree | af2e1c90555e486dc35820d557ca06c2d68cedff | |
| parent | 2e2c0fad51051871642f10f57cc0db96dd58a2ad (diff) | |
Add APIs for interactive work queue and worker thread count
| -rw-r--r-- | binaryninjaapi.cpp | 36 | ||||
| -rw-r--r-- | binaryninjaapi.h | 5 | ||||
| -rw-r--r-- | binaryninjacore.h | 4 | ||||
| -rw-r--r-- | python/__init__.py | 12 |
4 files changed, 56 insertions, 1 deletions
diff --git a/binaryninjaapi.cpp b/binaryninjaapi.cpp index 1a9f5713..e1dab528 100644 --- a/binaryninjaapi.cpp +++ b/binaryninjaapi.cpp @@ -201,3 +201,39 @@ void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function<vo context.func(); }); } + + +void BinaryNinja::WorkerInteractiveEnqueue(const function<void()>& action) +{ + WorkerThreadActionContext* ctxt = new WorkerThreadActionContext; + ctxt->action = action; + BNWorkerInteractiveEnqueue(ctxt, WorkerActionCallback); +} + + +void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function<void()>& action) +{ + struct + { + Ref<RefCountObject> owner; + function<void()> func; + } context; + context.owner = owner; + context.func = action; + + WorkerInteractiveEnqueue([=]() { + context.func(); + }); +} + + +size_t BinaryNinja::GetWorkerThreadCount() +{ + return BNGetWorkerThreadCount(); +} + + +void BinaryNinja::SetWorkerThreadCount(size_t count) +{ + BNSetWorkerThreadCount(count); +} diff --git a/binaryninjaapi.h b/binaryninjaapi.h index ff505527..a86f1067 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -375,6 +375,11 @@ namespace BinaryNinja void WorkerEnqueue(RefCountObject* owner, const std::function<void()>& action); void WorkerPriorityEnqueue(const std::function<void()>& action); void WorkerPriorityEnqueue(RefCountObject* owner, const std::function<void()>& action); + void WorkerInteractiveEnqueue(const std::function<void()>& action); + void WorkerInteractiveEnqueue(RefCountObject* owner, const std::function<void()>& action); + + size_t GetWorkerThreadCount(); + void SetWorkerThreadCount(size_t count); class DataBuffer { diff --git a/binaryninjacore.h b/binaryninjacore.h index 1fe0ad5a..960390fa 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -1968,6 +1968,10 @@ extern "C" // Worker thread queue management BINARYNINJACOREAPI void BNWorkerEnqueue(void* ctxt, void (*action)(void* ctxt)); BINARYNINJACOREAPI void BNWorkerPriorityEnqueue(void* ctxt, void (*action)(void* ctxt)); + BINARYNINJACOREAPI void BNWorkerInteractiveEnqueue(void* ctxt, void (*action)(void* ctxt)); + + BINARYNINJACOREAPI size_t BNGetWorkerThreadCount(void); + BINARYNINJACOREAPI void BNSetWorkerThreadCount(size_t count); #ifdef __cplusplus } diff --git a/python/__init__.py b/python/__init__.py index d5eca84a..e36670cc 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -10097,7 +10097,17 @@ def worker_enqueue(func): def worker_priority_enqueue(func): action = _ThreadActionContext(func) - core.BNWorkerEnqueue(0, action.callback) + core.BNWorkerPriorityEnqueue(0, action.callback) + +def worker_interactive_enqueue(func): + action = _ThreadActionContext(func) + core.BNWorkerInteractiveEnqueue(0, action.callback) + +def get_worker_thread_count(): + return core.BNGetWorkerThreadCount() + +def set_worker_thread_count(count): + core.BNSetWorkerThreadCount(count) bundled_plugin_path = core.BNGetBundledPluginDirectory() user_plugin_path = core.BNGetUserPluginDirectory() |
