int main(int argc, char **argv) { dbgopen(stderr); if (argc != 3) { cerr << "usage: " << argv[0] << " maxcount readernum" << endl; return(2); } int arg=0; int imax = ::atoi(argv[++arg]); MustBeTrue(imax > 0); int nreaders = ::atoi(argv[++arg]); MustBeTrue(nreaders > 0); EventQueue<int> eq; std::list<UseCntPtr<Reader> > readers; std::list<UseCntPtr<SimpleThread> > threads; for (int ireader=1; ireader<=nreaders; ++ireader) { UseCntPtr<Reader> reader(new Reader(ireader, eq)); readers.push_back(reader); UseCntPtr<SimpleThread> st(new SimpleThread(reader)); MustBeTrue(st->isOk()); MustBeTrue(st->run() == 0); MustBeTrue(st->isOk()); threads.push_back(st); } SimpleThread st(new Writer(0, imax, eq)); MustBeTrue(st.isOk()); MustBeTrue(st.run() == 0); MustBeTrue(st.isOk()); void *retval; st.join(retval); eq.done(); std::list<UseCntPtr<SimpleThread> >::iterator iter = threads.begin(); std::list<UseCntPtr<SimpleThread> >::iterator iterend = threads.end(); for ( ; iter != iterend; ++iter) { (*iter)->join(retval); } return(0); }