demux_quitter.hpp

00001 #line 3679 "./lpsrc/flx_demux.pak"
00002 
00003 #ifndef __DEMUX_QUITTER__
00004 #define __DEMUX_QUITTER__
00005 
00006 #include <flx_demux_config.hpp>
00007 #include "demux_demuxer.hpp"  // demuxers
00008 #include "pthread_mutex.hpp"  // mutexes
00009 #include "pthread_condv.hpp"  // condition var for same
00010 
00011 #ifdef _WIN32
00012 #include "demux_wself_piper.hpp" // win32 self piper
00013 #else
00014 #include "demux_self_piper.hpp" // posix self piper
00015 #endif
00016 
00017 namespace flx { namespace demux {
00018 
00019 // a waitable boolean. gratuitously tied to demuxer by demux_quit_flag
00020 // todo: unhook.
00021 class DEMUX_EXTERN async_bool : public demux_quit_flag {
00022   flx::pthread::flx_mutex_t cv_lock;       // to work with the condition var
00023   flx::pthread::flx_condv_t finished_cond;
00024   bool finished;   // might seem redundant, but that's how CVs work.
00025 public:
00026   async_bool();
00027 
00028   void wait_until_true();
00029   virtual void signal_true();
00030 };
00031 
00032 // quits a demuxer
00033 class DEMUX_EXTERN demux_quitter : public demux_callback {
00034   // self pipes for getting demuxer attention
00035 #ifdef _WIN32
00036   wself_piper sp;
00037 #else
00038   self_piper sp;
00039 #endif
00040   async_bool finished;  // initially false
00041   void callback(demuxer* demux); // called back by demuxer in event thread.
00042 public:
00043   void quit(demuxer* demux); // blocks until event thread exits
00044 };
00045 
00046 /*
00047 class DEMUX_EXTERN wdemux_quitter : demux_callback {
00048   wself_piper sp;
00049   async_bool finished; // initially false
00050 public:
00051   void quit(iocp_demuxer* demux); // blocks until demuxer/event thread exits
00052 
00053   void callback(demuxer* d); // called back by demuxer
00054 };
00055 */
00056 
00057 } }
00058 
00059 #endif
00060 

Generated on Mon Dec 11 18:08:29 2006 for Felix by  doxygen 1.5.1