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