$treeview $search $mathjax $extrastylesheet
artdaq_core
v3_04_20a
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #include "artdaq-core/Core/SimpleQueueReader.hh" 00002 00003 #include <chrono> // for milliseconds 00004 #include <cstddef> // for std::size_t 00005 #include <iostream> 00006 #include <string> 00007 #include <thread> // std::this_thread::sleep_for 00008 #include "trace.h" // TRACE 00009 00010 namespace artdaq 00011 { 00012 int simpleQueueReaderApp(int argc, char** argv) 00013 { 00014 try 00015 { 00016 size_t eec(0); 00017 if (argc == 2) 00018 { 00019 std::istringstream ins(argv[1]); 00020 ins >> eec; 00021 } 00022 SimpleQueueReader reader(eec); 00023 reader.run(); 00024 return 0; 00025 } 00026 catch (std::string const& msg) 00027 { 00028 std::cerr << "simpleQueueReaderApp failed: " 00029 << msg; 00030 return 1; 00031 } 00032 catch (...) 00033 { 00034 return 1; 00035 } 00036 } 00037 00038 SimpleQueueReader:: 00039 SimpleQueueReader(std::size_t eec) : 00040 queue_(getGlobalQueue()) 00041 , expectedEventCount_(eec) 00042 { 00043 queue_.setReaderIsReady(); 00044 TLOG(50) << "SimpleQueueReader ctor done (after queue_.setReaderIsReady())"; 00045 } 00046 00047 void SimpleQueueReader::run() 00048 { 00049 std::size_t eventsSeen = 0; 00050 auto doPrint = getenv("VERBOSE_QUEUE_READING"); 00051 while (true) 00052 { 00053 RawEvent_ptr rawEventPtr; 00054 if (queue_.deqNowait(rawEventPtr)) 00055 { 00056 // If we got a null pointer, we're done... 00057 if (!rawEventPtr) { break; } 00058 ++eventsSeen; 00059 // Otherwise, do our work ... 00060 if (doPrint) { std::cout << *rawEventPtr << std::endl; } 00061 } 00062 else 00063 { 00064 std::this_thread::sleep_for(std::chrono::milliseconds(250)); 00065 } 00066 } 00067 if (expectedEventCount_ && eventsSeen != expectedEventCount_) 00068 { 00069 std::ostringstream os; 00070 os << "Wrong number of events in SimpleQueueReader (" 00071 << eventsSeen << " != " << expectedEventCount_ << ").\n"; 00072 throw os.str(); 00073 } 00074 } 00075 }