X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fbase_ui.h;h=4d490fea5c401f390442a06014d5d7c5fecce25b;hp=ea1afbbb5a3428e84fd4cc9b4fe0a02db45d2597;hb=467c801ce80b69abdb7efb4c23120532bed3fc96;hpb=6acdfc69b785841ac10a324484ddd0208612a213 diff --git a/libs/pbd/pbd/base_ui.h b/libs/pbd/pbd/base_ui.h index ea1afbbb5a..4d490fea5c 100644 --- a/libs/pbd/pbd/base_ui.h +++ b/libs/pbd/pbd/base_ui.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2009 Paul Davis + Copyright (C) 2000-2009 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,13 +32,14 @@ #include "pbd/libpbd_visibility.h" #include "pbd/crossthread.h" #include "pbd/event_loop.h" +#include "pbd/pthread_utils.h" /** A BaseUI is an abstraction designed to be used with any "user * interface" (not necessarily graphical) that needs to wait on * events/requests and dispatch/process them as they arrive. * * This implementation starts up a thread that runs a Glib main loop - * to wait on events/requests etc. + * to wait on events/requests etc. */ @@ -54,15 +55,13 @@ class LIBPBD_API BaseUI : public sigc::trackable, public PBD::EventLoop Glib::Threads::Thread* event_loop_thread() const { return run_loop_thread; } bool caller_is_self () const { return Glib::Threads::Thread::self() == run_loop_thread; } - std::string name() const { return _name; } - bool ok() const { return _ok; } - + static RequestType new_request_type(); static RequestType CallSlot; static RequestType Quit; - /** start up a thread to run the main loop + /** start up a thread to run the main loop */ void run (); @@ -72,7 +71,7 @@ class LIBPBD_API BaseUI : public sigc::trackable, public PBD::EventLoop void quit (); protected: - bool _ok; + bool _ok; Glib::RefPtr _main_loop; Glib::RefPtr m_context; @@ -81,7 +80,7 @@ class LIBPBD_API BaseUI : public sigc::trackable, public PBD::EventLoop Glib::Threads::Cond _running; /* this signals _running from within the event loop, - from an idle callback + from an idle callback */ bool signal_running (); @@ -93,14 +92,11 @@ class LIBPBD_API BaseUI : public sigc::trackable, public PBD::EventLoop virtual void thread_init () {}; -#ifdef PLATFORM_WINDOWS - static gboolean _request_handler (gpointer); - bool request_handler (); -#else + int set_thread_priority (const int policy = PBD_SCHED_FIFO, int priority = 0) const; + /** Called when there input ready on the request_channel */ bool request_handler (Glib::IOCondition); -#endif void signal_new_request (); void attach_request_source (); @@ -112,13 +108,10 @@ class LIBPBD_API BaseUI : public sigc::trackable, public PBD::EventLoop virtual void handle_ui_requests () = 0; private: - std::string _name; BaseUI* base_ui_instance; -#ifndef PLATFORM_WINDOWS CrossThreadChannel request_channel; -#endif - + static uint64_t rt_bit; int setup_request_pipe ();