SourceXtractorPlusPlus
0.15
Please provide a description of the project.
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
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_ */
SourceXtractor::MultithreadedMeasurement::m_source_to_row
SourceToRowConverter m_source_to_row
Definition:
MultithreadedMeasurement.h:58
ThreadPool.h
std::shared_ptr< Euclid::ThreadPool >
SourceXtractor::MultithreadedMeasurement::m_abort_raised
std::atomic_bool m_abort_raised
Definition:
MultithreadedMeasurement.h:63
std::function< Euclid::Table::Row(const SourceInterface &)>
std::condition_variable
SourceXtractor::MultithreadedMeasurement::waitForThreads
void waitForThreads() override
Definition:
MultithreadedMeasurement.cpp:46
std::mutex
SourceXtractor::MultithreadedMeasurement::m_new_output
std::condition_variable m_new_output
Definition:
MultithreadedMeasurement.h:65
Measurement.h
SourceXtractor::Measurement
Definition:
Measurement.h:34
SourceXtractor::MultithreadedMeasurement::MultithreadedMeasurement
MultithreadedMeasurement(SourceToRowConverter source_to_row, const std::shared_ptr< Euclid::ThreadPool > &thread_pool)
Definition:
MultithreadedMeasurement.h:41
std::list
STL class.
SourceXtractor::MultithreadedMeasurement::m_thread_pool
std::shared_ptr< Euclid::ThreadPool > m_thread_pool
Definition:
MultithreadedMeasurement.h:59
SourceXtractor::MultithreadedMeasurement::m_output_thread
std::unique_ptr< std::thread > m_output_thread
Definition:
MultithreadedMeasurement.h:60
SourceXtractor::MultithreadedMeasurement::m_output_queue
std::list< std::pair< int, std::shared_ptr< SourceGroupInterface > > > m_output_queue
Definition:
MultithreadedMeasurement.h:66
SourceXtractor::MultithreadedMeasurement::~MultithreadedMeasurement
virtual ~MultithreadedMeasurement()
Definition:
MultithreadedMeasurement.cpp:36
std::unique_ptr
STL class.
SourceXtractor::MultithreadedMeasurement::m_group_counter
int m_group_counter
Definition:
MultithreadedMeasurement.h:62
SourceXtractor::MultithreadedMeasurement::m_output_queue_mutex
std::mutex m_output_queue_mutex
Definition:
MultithreadedMeasurement.h:67
SourceXtractor::MultithreadedMeasurement::handleMessage
void handleMessage(const std::shared_ptr< SourceGroupInterface > &source_group) override
Definition:
MultithreadedMeasurement.cpp:54
SourceXtractor::MultithreadedMeasurement
Definition:
MultithreadedMeasurement.h:37
SourceXtractor::MultithreadedMeasurement::m_input_done
std::atomic_bool m_input_done
Definition:
MultithreadedMeasurement.h:63
SourceXtractor::MultithreadedMeasurement::startThreads
void startThreads() override
Definition:
MultithreadedMeasurement.cpp:42
SourceXtractor::MultithreadedMeasurement::outputThreadLoop
void outputThreadLoop()
Definition:
MultithreadedMeasurement.cpp:93
SourceXtractor::MultithreadedMeasurement::outputThreadStatic
static void outputThreadStatic(MultithreadedMeasurement *measurement)
Definition:
MultithreadedMeasurement.cpp:77
Generated by
1.8.5