[ create a new paste ] login | about

Link: http://codepad.org/vtje7q6m    [ raw code | output | fork ]

C++, pasted on Dec 14:
#ifndef DatenModul_hpp
#define DatenModul_hpp

#include <string>
#include <map>
#include <boost/thread.hpp>

#include "Modul.hpp"


class DatenModul
{
  public:
    DatenModul(int);
    void anmeldenModul(Modul*);
    void eintragenDaten(std::string);
    Modul* abfragenDaten(std::string);
    std::string abfragenModul(boost::thread::id);
    bool bereit();

  protected:
    std::map< boost::thread::id, Modul* > ModuleListe;
    std::map< std::string, boost::thread::id > DatenZuModulListe;
    int AnzahlModule;
    int bereiteModule;
    boost::mutex DatenZuModulListeMutex;
    boost::mutex ModulListeMutex;
    boost::condition_variable_any DatenZuModulListeEintrag;
    boost::condition_variable_any DatenModulBereit;

};

#endif




#include "DatenModul.hpp"
#include "GlobaleFunktionen.cpp"


DatenModul::DatenModul(int i) : AnzahlModule(i) {};


void DatenModul::anmeldenModul(Modul* M)
{
  std::cout << "A" << std::endl;
  boost::lock_guard<boost::mutex> lock(ModulListeMutex);
  std::cout << "B" << std::endl;
  boost::thread::id ID = boost::this_thread::get_id();
  std::cout << "C " << ID << std::endl;
  ModuleListe.insert( std::make_pair( ID, M ) );
  //ModuleListe[ID]=M;


  #ifdef DEBUG
    std::stringstream ausgabe;
    ausgabe << "Datenmodul: " << abfragenModul(ID) << " hat sich angemeldet";
    debugging(ausgabe.str());
  #endif

};


std::string DatenModul::abfragenModul(boost::thread::id ID)
{
  boost::lock_guard<boost::mutex> lock(ModulListeMutex);
  std::map< boost::thread::id, Modul* >::iterator i;
  i = ModuleListe.find(ID);
  
  if( i==ModuleListe.end() ) return "NICHT GEFUNDEN!";
  else return i->second->Modulname;

};


void DatenModul::eintragenDaten(std::string D)
{
  boost::lock_guard<boost::mutex> lock(DatenZuModulListeMutex);
  boost::thread::id ID = boost::this_thread::get_id();
  DatenZuModulListe[D]=ID;
  DatenZuModulListeEintrag.notify_all();
  #ifdef DEBUG
    std::stringstream ausgabe;
        ausgabe << "Datenmodul: " << abfragenModul(ID) << " hat sich für " << D << " eingetragen.";
    debugging(ausgabe.str());
  #endif
};


Modul* DatenModul::abfragenDaten(std::string D)
{
  boost::lock_guard<boost::mutex> lock(DatenZuModulListeMutex);
  std::map< std::string, boost::thread::id >::iterator i;
  i = DatenZuModulListe.find(D);

  while( i==DatenZuModulListe.end() )
  {
    #ifdef DEBUG
      std::stringstream ausgabe;
      ausgabe << "Datenmodul: " << abfragenModul(boost::this_thread::get_id()) << " hat ERFOLGLOS das Erstellermodul von " << D << " abgefragt. Warte auf Eintrag!";
      debugging(ausgabe.str());
    #endif

    DatenZuModulListeEintrag.wait(DatenZuModulListeMutex);
    i = DatenZuModulListe.find(D);
  }

  {
    boost::lock_guard<boost::mutex> lock(ModulListeMutex);
    std::map< boost::thread::id, Modul* >::iterator i2;
    i2 = ModuleListe.find(i->second);
  
    if( i2==ModuleListe.end() )
    {
      #ifdef DEBUG
        std::stringstream ausgabe;
        ausgabe << "Datenmodul: FEHLER i2==ModuleListe.end()";
        debugging(ausgabe.str());
      #endif
    }
 
    else
    {
      #ifdef DEBUG
        std::stringstream ausgabe;
        ausgabe << "Datenmodul: " << abfragenModul(boost::this_thread::get_id()) << " hat das Erstellermodul von " << D << " abgefragt.";
        debugging(ausgabe.str());
      #endif

      return i2->second;
    }
  }
};


bool DatenModul::bereit()
{
  boost::lock_guard<boost::mutex> lock(ModulListeMutex);

  ++bereiteModule;

  #ifdef DEBUG
    std::stringstream ausgabe;
    ausgabe << "Datenmodul: " << abfragenModul(boost::this_thread::get_id()) << " ist bereit. " << bereiteModule << " von "<< AnzahlModule << " Modulen sind bereit.";
    debugging(ausgabe.str());
  #endif 

  if( bereiteModule==AnzahlModule)
  {
    

    DatenModulBereit.notify_all();
  }

  while( bereiteModule!=AnzahlModule ) DatenModulBereit.wait(ModulListeMutex);

  return true;
}


Output:
1
2
3
4
5
Line 20: error: Modul.hpp: No such file or directory
Line 25: error: DatenModul.hpp: No such file or directory
Line 32: error: GlobaleFunktionen.cpp: No such file or directory
Line 15: error: 'Modul' has not been declared
compilation terminated due to -Wfatal-errors.


Create a new paste based on this one


Comments: