| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

InertMessageSvc.cpp
Go to the documentation of this file.
1 // Include files
2
3 // From Gaudi
4 #include "GaudiKernel/SvcFactory.h"
5 // local
6 #include "InertMessageSvc.h"
7
8 // ----------------------------------------------------------------------------
9 // Implementation file for class: InertMessageSvc
10 //
11 // 12/02/2013: Danilo Piparo
12 // ----------------------------------------------------------------------------
13 DECLARE_SERVICE_FACTORY(InertMessageSvc)
14
15 //---------------------------------------------------------------------------
16
17 InertMessageSvc::InertMessageSvc(const std::string& name, ISvcLocator* pSvcLocator)
18 : MessageSvc(name, pSvcLocator),
19 m_isActive(false){
20 }
21
22 //---------------------------------------------------------------------------
23
24 InertMessageSvc::~InertMessageSvc() {
25 }
26
27 //---------------------------------------------------------------------------
28
29 StatusCode InertMessageSvc::initialize() {
30 StatusCode sc = MessageSvc::initialize(); // must be executed first
31 if ( sc.isFailure() ) return sc; // error printed already by MessageSvc
32
33 info() << "Activating in a separate thread" << endmsg;
34 m_thread = std::thread (std::bind(&InertMessageSvc::m_activate,
35 this));
36
37 return StatusCode::SUCCESS;
38 }
39
40 //---------------------------------------------------------------------------
41
42 StatusCode InertMessageSvc::InertMessageSvc::finalize() {
43
44 m_deactivate();
45
46 m_thread.join();
47
48 return MessageSvc::finalize(); // must be called after all other actions
49
50 }
51
52 //---------------------------------------------------------------------------
53
54 void InertMessageSvc::m_activate(){
55 m_isActive=true;
56 messageActionPtr thisMessageAction;
57 while (m_isActive or not m_messageActionsQueue.empty()){
58 m_messageActionsQueue.pop(thisMessageAction);
59 (*thisMessageAction)();
60 }
61 }
62
63 //---------------------------------------------------------------------------
64
65 void InertMessageSvc::m_deactivate(){
66
67 if (m_isActive){
68 // This would be the last action
69 m_messageActionsQueue.push(messageActionPtr(new messageAction([this]() {m_isActive=false;})));
70 }
71 }
72
73 //---------------------------------------------------------------------------
80 void InertMessageSvc::reportMessage(const Message& msg, int outputLevel) {
81 m_messageActionsQueue.push(
82 messageActionPtr(new messageAction([this, msg,outputLevel] ()
83 {this->i_reportMessage(msg, outputLevel);})));
84 }
85
86 //---------------------------------------------------------------------------
87
88 void InertMessageSvc::reportMessage(const Message& msg) {
89 m_messageActionsQueue.push(
90 messageActionPtr(new messageAction([this,msg] ()
91 {this->i_reportMessage(msg, this->outputLevel(msg.getSource()));})));
92 }
93
94 //---------------------------------------------------------------------------
95
96 void InertMessageSvc::reportMessage(const StatusCode& code, const std::string& source) {
97 m_messageActionsQueue.push(
98 messageActionPtr(new messageAction([this,code,source] ()
99 {this->i_reportMessage(code, source);})));
100 }
101
102 //---------------------------------------------------------------------------
InertMessageSvc
Definition: InertMessageSvc.py:1
std::shared_ptr
ISvcLocator
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:28
GaudiMP.FdsRegistry.msg
tuple msg
Definition: FdsRegistry.py:8
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:124
MessageSvc::i_reportMessage
virtual void i_reportMessage(const Message &msg, int outputLevel)
Internal implementation of reportMessage(const Message&,int) without lock.
Definition: MessageSvc.cpp:451
InertMessageSvc.h
std
STL namespace.
InertMessageSvc::messageActionPtr
std::shared_ptr< messageAction > messageActionPtr
This is done since the copy of the lambda storage is too expensive.
Definition: InertMessageSvc.h:58
InertMessageSvc::m_thread
std::thread m_thread
Definition: InertMessageSvc.h:61
merge_files.sc
int sc
Definition: merge_files.py:167
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
InertMessageSvc::~InertMessageSvc
virtual ~InertMessageSvc()
Destructor.
Definition: InertMessageSvc.cpp:24
std::string
STL class.
InertMessageSvc::m_deactivate
void m_deactivate()
Definition: InertMessageSvc.cpp:65
SvcFactory.h
MessageSvc::initialize
StatusCode initialize() override
Initialize Service.
Definition: MessageSvc.cpp:123
StatusCode::SUCCESS
Definition: StatusCode.h:30
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
InertMessageSvc::reportMessage
virtual void reportMessage(const Message &msg)
Implementation of IMessageSvc::reportMessage()
Definition: InertMessageSvc.cpp:88
std::bind
T bind(T...args)
DECLARE_SERVICE_FACTORY
#define DECLARE_SERVICE_FACTORY(x)
Definition: Service.h:361
InertMessageSvc::initialize
virtual StatusCode initialize()
Initialization of the service.
Definition: InertMessageSvc.cpp:29
Message
The Message class.
Definition: Message.h:14
MessageSvc::finalize
StatusCode finalize() override
Finalize Service.
Definition: MessageSvc.cpp:321
InertMessageSvc::m_messageActionsQueue
tbb::concurrent_bounded_queue< messageActionPtr > m_messageActionsQueue
Definition: InertMessageSvc.h:59
Message::getSource
const std::string & getSource() const
Get the message source.
Definition: Message.cpp:115
MessageSvc::outputLevel
int outputLevel() const override
Definition: MessageSvc.cpp:693
InertMessageSvc::m_activate
void m_activate()
Definition: InertMessageSvc.cpp:54
InertMessageSvc::m_isActive
bool m_isActive
Definition: InertMessageSvc.h:54
MessageSvc
Definition: MessageSvc.h:30
std::thread
STL class.
InertMessageSvc::messageAction
std::function< void()> messageAction
Definition: InertMessageSvc.h:56
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244