mainthread module¶
This module provides two ways to execute “jobs”:
- On the Binary Ninja main thread (the UI event thread when running in the GUI application):
On a worker thread
Any manipulation of the GUI should be performed on the main thread, but any non-GUI work is generally better to be performed using a worker. This is especially true for any longer-running work, as the user interface will be unable to update itself while a job is executing on the main thread.
There are three worker queues, in order of decreasing priority:
The Interactive Queue (
worker_interactive_enqueue
)The Priority Queue (
worker_priority_enqueue
)The Worker Queue (
worker_enqueue
)
All of these queues are serviced by the same pool of worker threads. The difference between the queues is basically one of priority: one queue must be empty of jobs before a worker thread will execute a job from a lower priority queue.
The default maximum number of concurrent worker threads is controlled by the
analysis.limits.workerThreadCount setting but can be adjusted at runtime via
set_worker_thread_count
.
The worker threads are native threads, managed by the Binary Ninja core. If
more control over the thread is required, consider using the
BackgroundTaskThread
class.
- execute_on_main_thread(func)[source]¶
The
execute_on_main_thread
function takes a single parameter which is a function that will be executed on the main Binary Ninja thread.Warning
May be required for some GUI operations, but should be used sparingly as it can block the UI.
- execute_on_main_thread_and_wait(func)[source]¶
The
execute_on_main_thread
function takes a single parameter which is a function that will be executed on the main Binary Ninja thread and will block execution of further python until the function returns.Warning
May be required for some GUI operations, but should be used sparingly as it can block the UI.
- get_worker_thread_count()[source]¶
The
get_worker_thread_count
function returns the number of worker threads that are currently running. By default, this is the number of cores on the system minus one, however this can be changed withset_worker_thread_count
.