DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
pipeline.hpp
Go to the documentation of this file.
1#ifndef OKS_PIPELINE_H
2#define OKS_PIPELINE_H
3
5//
6// copy from IPC
7//
9
10#include <boost/thread.hpp>
11#include <boost/thread/barrier.hpp>
12#include <boost/thread/condition.hpp>
13#include <memory>
14#include <queue>
15
16namespace dunedaq {
17namespace oks {
18
19class OksJob
20{
21 public:
22
23 virtual ~OksJob() { ; }
24 virtual void run(void) = 0;
25
26};
27
29{
30 public:
31 OksPipeline( size_t size );
32
34
35 void waitForCompletion();
36
37 void addJob( OksJob * job );
38
39 private:
40
41 struct Worker
42 {
43 Worker( OksPipeline & pipeline )
44 : m_pipeline( pipeline ),
45 m_idle( true ),
46 m_shutdown( false ),
47 m_stop( false ),
48 m_running( false )
49 { ; }
50
51 void run();
52
53 bool setJob( OksJob * job );
54
55 void shutdown();
56
57 void stop();
58
59 private:
61 boost::mutex m_mutex;
62 boost::condition m_condition;
63 bool m_idle;
65 bool m_stop;
68 };
69
70 typedef std::shared_ptr<Worker> WorkerPtr;
71
72 private:
73 friend struct Worker;
74
75 bool getJob( OksJob* & job );
76
77 private:
78 boost::mutex m_mutex;
79 boost::condition m_condition;
80 boost::barrier m_barrier;
81 boost::thread_group m_pool;
82 std::vector<WorkerPtr> m_workers;
83 std::queue<OksJob*> m_jobs;
84};
85
86} // namespace oks
87} // namespace dunedaq
88#endif
virtual void run(void)=0
boost::condition m_condition
Definition pipeline.hpp:79
std::queue< OksJob * > m_jobs
Definition pipeline.hpp:83
std::vector< WorkerPtr > m_workers
Definition pipeline.hpp:82
bool getJob(OksJob *&job)
Definition pipeline.cpp:129
boost::thread_group m_pool
Definition pipeline.hpp:81
std::shared_ptr< Worker > WorkerPtr
Definition pipeline.hpp:70
void addJob(OksJob *job)
Definition pipeline.cpp:98
boost::barrier m_barrier
Definition pipeline.hpp:80
Including Qt Headers.
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Definition __init__.py:1
Worker(OksPipeline &pipeline)
Definition pipeline.hpp:43