00001 #include "artdaq-core/Core/SimpleQueueReader.hh"
00002
00003 #include <chrono>
00004 #include <cstddef>
00005 #include <iostream>
00006 #include <string>
00007 #include <thread>
00008
00009 namespace artdaq {
00010
00011 int simpleQueueReaderApp(int argc, char **argv)
00012 {
00013 try {
00014 size_t eec(0);
00015 if (argc == 2) {
00016 std::istringstream ins(argv[1]);
00017 ins >> eec;
00018 }
00019 SimpleQueueReader reader(eec);
00020 reader.run();
00021 return 0;
00022 }
00023 catch (std::string const & msg) {
00024 std::cerr << "simpleQueueReaderApp failed: "
00025 << msg;
00026 return 1;
00027 }
00028 catch (...) {
00029 return 1;
00030 }
00031 }
00032
00033 SimpleQueueReader::
00034 SimpleQueueReader(std::size_t eec) :
00035 queue_(getGlobalQueue()),
00036 expectedEventCount_(eec)
00037 { }
00038
00039 void SimpleQueueReader::run()
00040 {
00041 std::size_t eventsSeen = 0;
00042 char * doPrint = getenv("VERBOSE_QUEUE_READING");
00043 while (true) {
00044 RawEvent_ptr rawEventPtr;
00045 if (queue_.deqNowait(rawEventPtr)) {
00046
00047 if (!rawEventPtr) { break; }
00048 ++eventsSeen;
00049
00050 if (doPrint) { std::cout << *rawEventPtr << std::endl; }
00051 }
00052 else {
00053 std::this_thread::sleep_for(std::chrono::milliseconds(250));
00054 }
00055 }
00056 if (expectedEventCount_ && eventsSeen != expectedEventCount_)
00057 {
00058 std::ostringstream os;
00059 os << "Wrong number of events in SimpleQueueReader ("
00060 << eventsSeen << " != " << expectedEventCount_ << ").\n";
00061 throw os.str();
00062 }
00063 }
00064 }