20 #ifndef __pbd_abstract_ui_h__
21 #define __pbd_abstract_ui_h__
27 #include <glibmm/threads.h>
45 #ifdef ABSTRACT_UI_EXPORTS
46 #define ABSTRACT_UI_API LIBPBD_DLL_EXPORT
48 #define ABSTRACT_UI_API LIBPBD_DLL_IMPORT
54 template<
typename RequestObject>
61 void register_thread (std::string, pthread_t, std::string, uint32_t num_requests);
62 void call_slot (EventLoop::InvalidationRecord*,
const boost::function<
void()>&);
72 :
PBD::RingBufferNPT<RequestObject> (size)
78 #if defined(COMPILER_MINGW) && defined(PTW32_VERSION)
81 bool operator() (
const ptw32_handle_t& thread1,
const ptw32_handle_t& thread2)
83 return thread1.p < thread2.p;
86 typedef typename std::map<pthread_t,RequestBuffer*, pthread_cmp>::iterator RequestBufferMapIterator;
87 typedef std::map<pthread_t,RequestBuffer*, pthread_cmp> RequestBufferMap;
101 void send_request (RequestObject *);
103 virtual void do_request (RequestObject *) = 0;
Glib::Threads::Mutex request_buffer_map_lock
Glib::Threads::Mutex & slot_invalidation_mutex()
std::list< RequestObject * > request_list
PBD::ScopedConnection new_thread_connection
RequestBuffer(uint32_t size, AbstractUI< RequestObject > &uir)
static Glib::Threads::Private< RequestBuffer > per_thread_request_buffer
LIBPBD_API uint64_t AbstractUI
std::map< pthread_t, RequestBuffer * >::iterator RequestBufferMapIterator
virtual void call_slot(InvalidationRecord *, const boost::function< void()> &)=0
Glib::Threads::Mutex request_list_lock
RequestBufferMap request_buffers
virtual void handle_ui_requests()=0
RequestBuffer::rw_vector RequestBufferVector
std::map< pthread_t, RequestBuffer * > RequestBufferMap
AbstractUI< RequestObject > & ui