CMS 3D CMS Logo

TransformAsyncIntStreamProducer.cc
Go to the documentation of this file.
4 #include "DataFormats/TestObjects/interface/ToyProducts.h"
6 
7 #include <thread>
8 #include <chrono>
9 namespace edmtest {
10  class TransformAsyncIntStreamProducer : public edm::stream::EDProducer<edm::Transformer> {
11  public:
12  struct WorkCache {
13  std::shared_ptr<std::thread> thread_;
14  IntProduct value_;
15  };
16 
18  : getToken_(consumes(iPSet.getParameter<edm::InputTag>("get"))),
19  offset_(iPSet.getParameter<unsigned int>("offset")),
20  transformOffset_(iPSet.getParameter<unsigned int>("transformOffset")) {
21  putToken_ = produces<IntProduct>();
22  bool check = iPSet.getUntrackedParameter<bool>("checkTransformNotCalled");
23  registerTransformAsync(
24  putToken_,
25  [offset = transformOffset_, check](auto const& iFrom, auto iTask) {
26  if (check) {
27  throw cms::Exception("TransformShouldNotBeCalled");
28  }
29  WorkCache ret;
30  using namespace std::chrono_literals;
31  ret.thread_ = std::make_shared<std::thread>([iTask] { std::this_thread::sleep_for(100ms); });
32  ret.value_ = IntProduct(iFrom.value + offset);
33  return ret;
34  },
35  [](auto const& iFrom) {
36  iFrom.thread_->join();
37  return iFrom.value_;
38  },
39  "transform");
40  }
41 
42  void produce(edm::Event& iEvent, edm::EventSetup const&) override {
43  iEvent.emplace(putToken_, iEvent.get(getToken_).value + offset_);
44  }
47  pset.add<edm::InputTag>("get");
48  pset.add<unsigned int>("offset", 0);
49  pset.add<unsigned int>("transformOffset", 1);
50  pset.addUntracked<bool>("checkTransformNotCalled", false);
51 
52  desc.addDefault(pset);
53  }
54 
55  private:
58  const unsigned int offset_;
59  const unsigned int transformOffset_;
60  };
61 } // namespace edmtest
62 
TransformAsyncIntStreamProducer(edm::ParameterSet const &iPSet)
ret
prodAgent to be discontinued
static void fillDescriptions(edm::ConfigurationDescriptions &desc)
T getUntrackedParameter(std::string const &, T const &) const
int iEvent
Definition: GenABIO.cc:224
void produce(edm::Event &iEvent, edm::EventSetup const &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
HLT enums.