ewmscp  ..
Public Member Functions | Public Attributes | Private Member Functions | List of all members
queuesAndThreads Class Reference

class to make sure all threads are joined before thread object is deleted in case of an exception to do so, all queues must be signalled as done More...

Collaboration diagram for queuesAndThreads:
[legend]

Public Member Functions

 queuesAndThreads ()=default
 
 ~queuesAndThreads () noexcept(true)
 

Public Attributes

copyRequest::simpleQueue requests
 
copyRequest::timedQueue delayedRequests
 
copyRequest::simpleQueue results
 
std::thread printer
 
std::thread delayer
 
std::forward_list< std::thread > workers
 

Private Member Functions

template<class T >
void stopQueue (T &queue, const std::string &name)
 
void joinThread (std::thread &t)
 

Detailed Description

class to make sure all threads are joined before thread object is deleted in case of an exception to do so, all queues must be signalled as done

Definition at line 332 of file ewmscp.cpp.

Constructor & Destructor Documentation

◆ queuesAndThreads()

queuesAndThreads::queuesAndThreads ( )
default

◆ ~queuesAndThreads()

queuesAndThreads::~queuesAndThreads ( )
inlinenoexcept

Definition at line 355 of file ewmscp.cpp.

355  {
356  stopQueue(requests, "requests");
357  stopQueue(delayedRequests, "delayedRequests");
358  stopQueue(results, "results");
361  for (auto& worker : workers) {
362  joinThread(worker);
363  }
364  }

References delayedRequests, delayer, joinThread(), printer, requests, results, stopQueue(), and workers.

Here is the call graph for this function:

Member Function Documentation

◆ joinThread()

void queuesAndThreads::joinThread ( std::thread &  t)
inlineprivate

Definition at line 342 of file ewmscp.cpp.

342  {
343  if (t.joinable()) {
344  t.join();
345  }
346  }

Referenced by ~queuesAndThreads().

Here is the caller graph for this function:

◆ stopQueue()

template<class T >
void queuesAndThreads::stopQueue ( T &  queue,
const std::string &  name 
)
inlineprivate

Definition at line 333 of file ewmscp.cpp.

333  {
334  try {
335  queue.signalDone();
336  } catch (const std::logic_error& e) {
337  if (queue.size() > 1) {
338  errMsg::emit(errMsg::level::debug, errMsg::location(), name, "signalled", "done");
339  }
340  }
341  }

References errMsg::debug, and errMsg::emit().

Referenced by ~queuesAndThreads().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ delayedRequests

copyRequest::timedQueue queuesAndThreads::delayedRequests

Definition at line 349 of file ewmscp.cpp.

Referenced by ~queuesAndThreads().

◆ delayer

std::thread queuesAndThreads::delayer

Definition at line 352 of file ewmscp.cpp.

Referenced by ~queuesAndThreads().

◆ printer

std::thread queuesAndThreads::printer

Definition at line 351 of file ewmscp.cpp.

Referenced by ~queuesAndThreads().

◆ requests

copyRequest::simpleQueue queuesAndThreads::requests

Definition at line 348 of file ewmscp.cpp.

Referenced by ~queuesAndThreads().

◆ results

copyRequest::simpleQueue queuesAndThreads::results

Definition at line 350 of file ewmscp.cpp.

Referenced by ~queuesAndThreads().

◆ workers

std::forward_list<std::thread> queuesAndThreads::workers

Definition at line 353 of file ewmscp.cpp.

Referenced by ~queuesAndThreads().


The documentation for this class was generated from the following file:
queuesAndThreads::delayedRequests
copyRequest::timedQueue delayedRequests
Definition: ewmscp.cpp:349
queuesAndThreads::results
copyRequest::simpleQueue results
Definition: ewmscp.cpp:350
errMsg::location
class for defining the location of a error message in the source code.
Definition: errMsgQueue.h:14
queuesAndThreads::stopQueue
void stopQueue(T &queue, const std::string &name)
Definition: ewmscp.cpp:333
queuesAndThreads::requests
copyRequest::simpleQueue requests
Definition: ewmscp.cpp:348
queuesAndThreads::printer
std::thread printer
Definition: ewmscp.cpp:351
errMsg::level::debug
@ debug
queuesAndThreads::delayer
std::thread delayer
Definition: ewmscp.cpp:352
queuesAndThreads::joinThread
void joinThread(std::thread &t)
Definition: ewmscp.cpp:342
errMsg::emit
void emit(level aLogLevel, const location &loc, const std::string &aObject, const std::string &aAction, const Args &... args)
function to create and enqueue a message, this is the only way that messages should be created!
Definition: errMsgQueue.h:148
queuesAndThreads::workers
std::forward_list< std::thread > workers
Definition: ewmscp.cpp:353