Advanced 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);
g_rec_mutex_lock(thread_mutex);
...
g_rec_mutex_unlock(thread_mutex);
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.
- ags_thread_parent()
- ags_thread_next()
- ags_thread_prev()
- ags_thread_children()
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:
- AgsMutexManager
- AgsCondManager
- AgsPollingThread
- AgsPollFD
- AgsTaskThread
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
Powered by Savane 3.14-3b9d.
Corresponding source code