//: C11:TestTQueue.cpp {RunByHand}
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
//{L} ZThread
#include <string>
#include <iostream>
#include "TQueue.h"
#include "zthread/Thread.h"
#include "LiftOff.h"
using namespace ZThread;
using namespace std;

class Starter : public Runnable {
  TQueue<Start*> rakety;
public:
  void add(Start* lo) { rakety.put(lo); }
  void run() {
    try {
      while(!Thread::interrupted()) {
        Start* raketa = rakety.get();
        raketa->run();
      }
    } catch(Interrupted_Exception&) { /* Exit */ }
    cout << "Ukončování Starteru" << endl;
  }
};

int main() {
  try {
    Starter* lor = new Starter;
    Thread t(lor);
    for(int i = 0; i < 5; i++)
      lor->add(new Start(10, i));
    cin.get();
    lor->add(new Start(10, 99));
    cin.get();
    t.interrupt();
  } catch(Synchronization_Exception& e) {
    cerr << e.what() << endl;
  }
} ///:~
