| Top |
GObject ╰── GDBusInterfaceSkeleton ╰── UDisksJobSkeleton ╰── UDisksBaseJob ╰── UDisksThreadedJob
This type provides an implementation of the UDisksJob interface for jobs that run in a thread.
gboolean (*UDisksThreadedJobFunc) (UDisksThreadedJob *job,GCancellable *cancellable,gpointer user_data,GError **error);
Job function that runs in a separate thread.
Long-running jobs should periodically check cancellable
to see if
they have been cancelled.
job |
||
cancellable |
A GCancellable (never |
|
user_data |
User data passed when creating |
|
error |
Return location for error (never |
UDisksThreadedJob * udisks_threaded_job_new (UDisksThreadedJobFunc job_func,gpointer user_data,GDestroyNotify user_data_free_func,UDisksDaemon *daemon,GCancellable *cancellable);
Creates a new UDisksThreadedJob instance.
The job is not started automatically! Use udisks_threaded_job_start() to
start the job after “threaded-job-completed” or
“completed” signals are connected (to get notified when the job is
done). This is to prevent a race condition with the job_func
finishing
before the signals are connected in which case the signal handlers are never
triggered.
job_func |
The function to run in another thread. |
|
user_data |
User data to pass to |
|
user_data_free_func |
Function to free |
|
daemon |
A UDisksDaemon. |
|
cancellable |
A GCancellable or |
void
udisks_threaded_job_start (UDisksThreadedJob *job);
Start the job
. Connect to the “threaded-job-completed” or
“completed” signals to get notified when the job is done.
*/ void udisks_threaded_job_start (UDisksThreadedJob *job) { GTask *task;
task = g_task_new (job, udisks_base_job_get_cancellable (UDISKS_BASE_JOB (job)), job_complete_cb, NULL);
/* Only spawn the completed callback once the job func has finished, we don't support early return as there still might be some undergoing I/O. */ g_task_set_return_on_cancel (task, FALSE); g_task_run_in_thread (task, run_task_job); g_object_unref (task); }
/**
udisks_threaded_job_run_sync:
job
: the job to run
error
: The GError set in case of failure
Run the job
synchronously.
Connect to the “threaded-job-completed” or “completed” signals to get notified when the job is done.
gboolean udisks_threaded_job_run_sync (UDisksThreadedJob *job,GError **error);
gpointer
udisks_threaded_job_get_user_data (UDisksThreadedJob *job);
Gets the user_data
parameter that job
was constructed with.
typedef struct _UDisksThreadedJob UDisksThreadedJob;
The UDisksThreadedJob structure contains only private data and should only be accessed using the provided API.
“job-func” property“job-func” gpointer
The UDisksThreadedJobFunc to use.
Flags: Read / Write / Construct Only
“user-data” property“user-data” gpointer
User data for the UDisksThreadedJobFunc.
Flags: Read / Write / Construct Only
“user-data-free-func” property“user-data-free-func” gpointer
Free function for user data for the UDisksThreadedJobFunc.
Flags: Read / Write / Construct Only
“threaded-job-completed” signalgboolean user_function (UDisksThreadedJob *job, gboolean result, GError *error, gpointer user_data)
Emitted when the threaded job is complete.
The default implementation simply emits the “completed”
signal with success
set to TRUE if, and only if, error
is
NULL. Otherwise, message
on that signal is set to a string
describing error
. You can avoid the default implementation by
returning TRUE from your signal handler.
This signal is emitted in the
thread-default main loopof the thread that job
was created in.
job |
The UDisksThreadedJob emitting the signal. |
|
result |
The gboolean returned by the UDisksThreadedJobFunc. |
|
error |
The GError set by the UDisksThreadedJobFunc. |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last