newsAdvanced Gtk+ Sequencer - News


GSequencer v3.0.0 planned release date 2020-05-07

Item posted by Joël Krähemann <jkraehemann> on Wed 20 Nov 2019 08:15:08 AM UTC.

The development on GSequencer v3.0.0 is on-going. The last 2 weeks I just spent with refactoring Advanced Gtk+ Sequencer's threading API.

Abandon POSIX thread API in favor of GThread and related

Wow, this were many mutices that had to be replaced. The common object field obj_mutex is now of type GRecMutex. There are usually macros to access the object's mutex. Like:

GRecMutex *thread_mutex;

thread_mutex = AGS_THREAD_GET_OBJ_MUTEX(thread);




Anyway, most of the time you should rather use accession functions or g_object_get() and g_object_set().

Refactored AgsThread

The AgsThread object resides as of 3.0.0 in ags/thread/ags_thread.[ch] and its synchronization work has been rewritten.

I have dropped the support for many exotic functions, like lock/unlock or wait for the tree. Further the suspend/resume, interrupt and monitor functions are removed.

No more nested functions in ags/thread/ags_thread.c.

Further you should make use of the tree accession functions and decrease the ref-count as you are done with the thread object.

Refactored AgsMainLoop

The main loop was just refactored to the new needs to provide tic-based parallelism.

Removed various threading related objects

The removed objects are:

Either there is no need for it or we use now GLib-2.0 facilities.

Implemented AgsTaskLauncher

The AgsTaskLauncher is invoked every time AgsThread::clock() is full synchronized. The ags_task_launcher_run() function is called by ags_task_launcher_sync_run() running AgsTask in the prior attached GMainContext.

Thought, GSequencer uses a dedicated GMainLoop, it would possible to callback events invoked by an AgsTask directly to the user interface by attaching default GMainContext.

by Joël

Back to the top

Powered by Savane 3.13-3cd0.
Corresponding source code