SourceXtractorPlusPlus
0.15
Please provide a description of the project.
SEImplementation
SEImplementation
Measurement
MultithreadedMeasurement.h
Go to the documentation of this file.
1
17
/*
18
* Multithreadedmeasurement->h
19
*
20
* Created on: May 17, 2018
21
* Author: mschefer
22
*/
23
24
#ifndef _SEIMPLEMENTATION_OUTPUT_MULTITHREADEDMEASUREMENT_H_
25
#define _SEIMPLEMENTATION_OUTPUT_MULTITHREADEDMEASUREMENT_H_
26
27
#include <atomic>
28
#include <thread>
29
#include <mutex>
30
#include <condition_variable>
31
#include <atomic>
32
#include <
AlexandriaKernel/ThreadPool.h
>
33
#include "
SEFramework/Pipeline/Measurement.h
"
34
35
namespace
SourceXtractor
{
36
37
class
MultithreadedMeasurement
:
public
Measurement
{
38
public
:
39
40
using
SourceToRowConverter
=
std::function
<
Euclid::Table::Row
(
const
SourceInterface
&)>;
41
MultithreadedMeasurement
(
SourceToRowConverter
source_to_row,
const
std::shared_ptr<Euclid::ThreadPool>
& thread_pool)
42
:
m_source_to_row
(source_to_row),
43
m_thread_pool
(thread_pool),
44
m_group_counter
(0),
45
m_input_done
(false),
m_abort_raised
(false) {}
46
47
virtual
~MultithreadedMeasurement
();
48
49
void
handleMessage
(
const
std::shared_ptr<SourceGroupInterface>
& source_group)
override
;
50
51
void
startThreads
()
override
;
52
void
waitForThreads
()
override
;
53
54
private
:
55
static
void
outputThreadStatic
(
MultithreadedMeasurement
* measurement);
56
void
outputThreadLoop
();
57
58
SourceToRowConverter
m_source_to_row
;
59
std::shared_ptr<Euclid::ThreadPool>
m_thread_pool
;
60
std::unique_ptr<std::thread>
m_output_thread
;
61
62
int
m_group_counter
;
63
std::atomic_bool
m_input_done
,
m_abort_raised
;
64
65
std::condition_variable
m_new_output
;
66
std::list<std::pair<int, std::shared_ptr<SourceGroupInterface>
>>
m_output_queue
;
67
std::mutex
m_output_queue_mutex
;
68
};
69
70
}
71
72
#endif
/* _SEIMPLEMENTATION_OUTPUT_MULTITHREADEDMEASUREMENT_H_ */
std::shared_ptr< Euclid::ThreadPool >
std::list
STL class.
SourceXtractor::MultithreadedMeasurement::handleMessage
void handleMessage(const std::shared_ptr< SourceGroupInterface > &source_group) override
Definition:
MultithreadedMeasurement.cpp:54
SourceXtractor::MultithreadedMeasurement::outputThreadStatic
static void outputThreadStatic(MultithreadedMeasurement *measurement)
Definition:
MultithreadedMeasurement.cpp:77
SourceXtractor::MultithreadedMeasurement::m_input_done
std::atomic_bool m_input_done
Definition:
MultithreadedMeasurement.h:63
std::function< Euclid::Table::Row(const SourceInterface &)>
SourceXtractor::MultithreadedMeasurement::m_thread_pool
std::shared_ptr< Euclid::ThreadPool > m_thread_pool
Definition:
MultithreadedMeasurement.h:59
SourceXtractor::Measurement
Definition:
Measurement.h:36
SourceXtractor::MultithreadedMeasurement::outputThreadLoop
void outputThreadLoop()
Definition:
MultithreadedMeasurement.cpp:93
SourceXtractor
Definition:
Aperture.h:30
SourceXtractor::MultithreadedMeasurement::MultithreadedMeasurement
MultithreadedMeasurement(SourceToRowConverter source_to_row, const std::shared_ptr< Euclid::ThreadPool > &thread_pool)
Definition:
MultithreadedMeasurement.h:41
SourceXtractor::MultithreadedMeasurement::m_abort_raised
std::atomic_bool m_abort_raised
Definition:
MultithreadedMeasurement.h:63
Measurement.h
SourceXtractor::MultithreadedMeasurement::m_source_to_row
SourceToRowConverter m_source_to_row
Definition:
MultithreadedMeasurement.h:58
SourceXtractor::MultithreadedMeasurement::m_output_queue_mutex
std::mutex m_output_queue_mutex
Definition:
MultithreadedMeasurement.h:67
SourceXtractor::MultithreadedMeasurement::m_new_output
std::condition_variable m_new_output
Definition:
MultithreadedMeasurement.h:65
SourceXtractor::MultithreadedMeasurement::~MultithreadedMeasurement
virtual ~MultithreadedMeasurement()
Definition:
MultithreadedMeasurement.cpp:36
SourceXtractor::MultithreadedMeasurement::m_output_queue
std::list< std::pair< int, std::shared_ptr< SourceGroupInterface > > > m_output_queue
Definition:
MultithreadedMeasurement.h:66
SourceXtractor::MultithreadedMeasurement::waitForThreads
void waitForThreads() override
Definition:
MultithreadedMeasurement.cpp:46
std::condition_variable
ThreadPool.h
std::mutex
STL class.
Euclid::Table::Row
SourceXtractor::MultithreadedMeasurement::m_output_thread
std::unique_ptr< std::thread > m_output_thread
Definition:
MultithreadedMeasurement.h:60
SourceXtractor::MultithreadedMeasurement::startThreads
void startThreads() override
Definition:
MultithreadedMeasurement.cpp:42
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition:
SourceInterface.h:46
SourceXtractor::MultithreadedMeasurement
Definition:
MultithreadedMeasurement.h:37
std::unique_ptr< std::thread >
SourceXtractor::MultithreadedMeasurement::m_group_counter
int m_group_counter
Definition:
MultithreadedMeasurement.h:62
Generated by
1.8.20