Page principale | Liste des namespaces | Hiérarchie des classes | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de namespace | Membres de classe

grabber.impl.hpp

00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 template<class T, size_t N>
00041 dataGrabber<T,N>::dataGrabber(Param* param, Caminfo* ci)
00042   :   mCurr(0)               ,
00043       mSend(N-1)             ,
00044       mRun(true)             ,
00045       mLogin(param->login)   ,
00046       mPass(param->pass)     ,
00047       mIp(param->ip)         ,
00048       mPort(param->port)
00049 {
00050   // Le buffer :  - courant est 0 (le premier)
00051   //              - a lire est le dernier (juste avant le premier)
00052   
00053   
00054   // Le generator
00055   // N -> pour le nb d'elements (pour rendre le containeur circulaire)
00056   // fill_data -> le foncteur (methode 'threadée')
00057   macq = new acq<T, N, fill_data<T> >
00058     ( &mBuffers[0]   ,   // Les buffers
00059       &mLock[0]      ,   // Les mutexes
00060       &mCurr         ,   // Le pointeur sur le buffer courant
00061       &mSend         ,   // Le pointeur sur le buffer a rendre
00062       &mRun          ,   // Le pointeur sur le booleen pour stopper
00063       &ready         , 
00064       param          ,
00065       ci
00066       );
00067   
00068   // Le thread
00069   // Lance le generator
00070   mThread    = new boost::thread(*macq);
00071   
00072 }
00073 
00074 
00075 template<class T, size_t N>
00076 dataGrabber<T,N>::~dataGrabber()
00077 {
00078   stop();
00079   
00080   mThread->join();
00081   
00082   // Si le generator existe
00083   if(macq)
00084     delete macq;    // On le delete
00085   
00086   // Si le thread existe
00087   if(mThread)
00088     delete mThread; // On le delete
00089 }
00090 
00091 
00092 template<class T, size_t N>
00093 buffer_t& dataGrabber<T,N>::getData()
00094 {
00095   // On lock le mutex
00096   boost::mutex::scoped_lock lock(mLock[mSend]);
00097   
00098   // On retourne le dernier buffer remplit
00099   return  mBuffers[mSend];
00100 }
00101 
00102 
00103 template<class T, size_t N>
00104 size_t dataGrabber<T,N>::size()
00105 {
00106   // On lock le mutex
00107   boost::mutex::scoped_lock lock(mLock[mSend]);
00108   
00109   // On renvoi la taille du dernier buffer remplit
00110   return  mBuffers[mSend].size();
00111 }
00112 
00113 
00114 template<class T, size_t N>
00115 bool dataGrabber<T,N>::isready() const
00116 {
00117   //std::cout <<  "grabber : " <<  macq->isready() <<  std::endl; 
00118   return ready;
00119 }
00120 
00121 
00122 template<class T, size_t N>
00123 void dataGrabber<T,N>::stop()
00124 {
00125   // Le thread s'arretera a la prochaine boucle du while
00126   mRun = false;
00127 }

Généré le Wed Aug 16 12:33:36 2006 pour IpsiC++library par  doxygen 1.4.4