CMS 3D CMS Logo

TransformAsyncIntProducer.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 TransformAsyncIntProducer : public edm::global::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  noPut_(iPSet.getParameter<bool>("noPut")) {
22  putToken_ = produces<IntProduct>();
23  bool check = iPSet.getUntrackedParameter<bool>("checkTransformNotCalled");
24  registerTransformAsync(
25  putToken_,
26  [offset = transformOffset_, check](auto const& iFrom, auto iTask) {
27  if (check) {
28  throw cms::Exception("TransformShouldNotBeCalled");
29  }
30  WorkCache ret;
31  using namespace std::chrono_literals;
32  ret.thread_ = std::make_shared<std::thread>([iTask] { std::this_thread::sleep_for(100ms); });
33  ret.value_ = IntProduct(iFrom.value + offset);
34  return ret;
35  },
36  [](auto const& iFrom) {
37  iFrom.thread_->join();
38  return iFrom.value_;
39  },
40  "transform");
41  }
42 
43  void produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const override {
44  if (not noPut_) {
45  iEvent.emplace(putToken_, iEvent.get(getToken_).value + offset_);
46  }
47  }
50  pset.add<edm::InputTag>("get");
51  pset.add<unsigned int>("offset", 0);
52  pset.add<unsigned int>("transformOffset", 1);
53  pset.addUntracked<bool>("checkTransformNotCalled", false);
54  pset.add<bool>("noPut", false);
55 
56  desc.addDefault(pset);
57  }
58 
59  private:
62  const unsigned int offset_;
63  const unsigned int transformOffset_;
64  const bool noPut_;
65  };
66 } // namespace edmtest
67 
void produce(edm::StreamID, edm::Event &iEvent, edm::EventSetup const &) const override
ret
prodAgent to be discontinued
const edm::EDGetTokenT< IntProduct > getToken_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getUntrackedParameter(std::string const &, T const &) const
int iEvent
Definition: GenABIO.cc:224
static void fillDescriptions(edm::ConfigurationDescriptions &desc)
edm::EDPutTokenT< IntProduct > putToken_
TransformAsyncIntProducer(edm::ParameterSet const &iPSet)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
HLT enums.