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"
00008 #include "pthread_mutex.hpp"
00009 #include "pthread_condv.hpp"
00010
00011 #ifdef _WIN32
00012 #include "demux_wself_piper.hpp"
00013 #else
00014 #include "demux_self_piper.hpp"
00015 #endif
00016
00017 namespace flx { namespace demux {
00018
00019
00020
00021 class DEMUX_EXTERN async_bool : public demux_quit_flag {
00022 flx::pthread::flx_mutex_t cv_lock;
00023 flx::pthread::flx_condv_t finished_cond;
00024 bool finished;
00025 public:
00026 async_bool();
00027
00028 void wait_until_true();
00029 virtual void signal_true();
00030 };
00031
00032
00033 class DEMUX_EXTERN demux_quitter : public demux_callback {
00034
00035 #ifdef _WIN32
00036 wself_piper sp;
00037 #else
00038 self_piper sp;
00039 #endif
00040 async_bool finished;
00041 void callback(demuxer* demux);
00042 public:
00043 void quit(demuxer* demux);
00044 };
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 } }
00058
00059 #endif
00060