diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-08-31 00:13:54 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-08-31 00:13:54 -0400 |
| commit | b84ab8966522eb5063e6a213ca1e48d32e0fd090 (patch) | |
| tree | c9041490b7cdb9db193ebac777ee18b518885076 /binaryninjaapi.cpp | |
| parent | 5b9887694a608b263f58fecfc3fa747b5f8dddf8 (diff) | |
Add API to enqueue work on the worker thread(s)
Diffstat (limited to 'binaryninjaapi.cpp')
| -rw-r--r-- | binaryninjaapi.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/binaryninjaapi.cpp b/binaryninjaapi.cpp index f98dfef7..71a5a8f7 100644 --- a/binaryninjaapi.cpp +++ b/binaryninjaapi.cpp @@ -24,6 +24,12 @@ using namespace BinaryNinja; using namespace std; +struct WorkerThreadActionContext +{ + std::function<void()> action; +}; + + void BinaryNinja::InitCorePlugins() { BNInitCorePlugins(); @@ -138,3 +144,59 @@ void BinaryNinja::AddOptionalPluginDependency(const string& name) { BNAddOptionalPluginDependency(name.c_str()); } + + +static void WorkerActionCallback(void* ctxt) +{ + WorkerThreadActionContext* action = (WorkerThreadActionContext*)ctxt; + action->action(); + delete action; +} + + +void BinaryNinja::WorkerEnqueue(const function<void()>& action) +{ + WorkerThreadActionContext* ctxt = new WorkerThreadActionContext; + ctxt->action = action; + BNWorkerEnqueue(ctxt, WorkerActionCallback); +} + + +void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function<void()>& action) +{ + struct + { + Ref<RefCountObject> owner; + function<void()> func; + } context; + context.owner = owner; + context.func = action; + + WorkerEnqueue([=]() { + context.func(); + }); +} + + +void BinaryNinja::WorkerPriorityEnqueue(const function<void()>& action) +{ + WorkerThreadActionContext* ctxt = new WorkerThreadActionContext; + ctxt->action = action; + BNWorkerPriorityEnqueue(ctxt, WorkerActionCallback); +} + + +void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function<void()>& action) +{ + struct + { + Ref<RefCountObject> owner; + function<void()> func; + } context; + context.owner = owner; + context.func = action; + + WorkerPriorityEnqueue([=]() { + context.func(); + }); +} |
