Lumiera  0.pre.03
»edit your freedom«
ThreadJoinable< RES > Class Template Reference

#include "lib/thread.hpp"

Description

template<typename RES = void>
class lib::ThreadJoinable< RES >

Variant of the standard case, requiring to wait and join() on the termination of this thread.

Useful to collect results calculated by multiple threads. Note however that the system resources of the thread are kept around until the join() call, and thus also the bool conversion yields true, even while the actual operation has already terminated.

Warning
Thread must be joined prior to destructor invocation, otherwise the application is shut down immediately via std::terminate.

Definition at line 676 of file thread.hpp.

Public Member Functions

lib::Result< RES > join ()
 put the caller into a blocking wait until this thread has terminated More...
 
- Public Member Functions inherited from ThreadLifecycle< thread::PolicyResultJoin, RES >
 ThreadLifecycle (Launch launcher)
 Primary constructor: Launch the new thread with flexible configuration. More...
 
 ThreadLifecycle (string const &threadID, FUN &&threadFunction, ARGS &&...args)
 Create a new thread to execute the given operation. More...
 
 ThreadLifecycle (RES(SUB::*memFun)(ARGS...), ARGS ...args)
 Special variant to bind a subclass member function as thread operation. More...
 
 operator bool () const
 Is this thread »active« and thus tied to OS resources? More...
 

Private Types

using Impl = thread::ThreadLifecycle< thread::PolicyResultJoin, RES >
 

Additional Inherited Members

- Static Public Member Functions inherited from ThreadLifecycle< thread::PolicyResultJoin, RES >
static auto buildInvocation (W &wrapper, tuple< INVO... > &&invocation)
 Build the invocation tuple, using #invokeThreadFunction to delegate to the user-provided functor and arguments.
 
static auto buildLauncher (INVO &&...args)
 Build a λ actually to launch the given thread operation later, after the thread-wrapper-object is fully initialised. More...
 
- Protected Member Functions inherited from ThreadLifecycle< thread::PolicyResultJoin, RES >
 ThreadLifecycle ()
 derived classes may create a disabled thread
 
- Protected Member Functions inherited from PolicyResultJoin< ThreadWrapper, RES >
void handle_after_thread ()
 
void handle_loose_thread ()
 
void perform_thread_function (FUN &&callable, ARGS &&...args)
 
- Protected Member Functions inherited from ThreadWrapper
 ThreadWrapper ()
 
 ThreadWrapper (string const &threadID)
 
void detach_thread_from_wrapper ()
 allow to detach explicitly — independent from thread-function's state. More...
 
void handle_after_thread ()
 called immediately before end of thread
 
void handle_begin_thread ()
 called immediately at start of thread
 
void handle_loose_thread ()
 called when destroying wrapper on still running thread
 
bool invokedWithinThread () const
 detect if the currently executing code runs within this thread More...
 
bool isLive () const
 
template<class... INVO>
void launchThread (tuple< INVO... > &&invocation)
 
void markThreadEnd ()
 
void markThreadStart ()
 
void setThreadName ()
 
void waitGracePeriod () noexcept
 
- Protected Member Functions inherited from MoveOnly
 MoveOnly (MoveOnly &&)=default
 
 MoveOnly (MoveOnly const &)=delete
 
MoveOnlyoperator= (MoveOnly &&)=delete
 
MoveOnlyoperator= (MoveOnly const &)=delete
 
- Static Protected Member Functions inherited from ThreadWrapper
static string decorate_with_global_count (string const &)
 Helper to create a suffix to the thread-ID with running count.
 
- Protected Attributes inherited from PolicyResultJoin< ThreadWrapper, RES >
lib::Result< RES > result_
 Wrapper to capture a success/failure indicator and possibly a computation result.
 
- Protected Attributes inherited from ThreadWrapper
const string threadID_
 
std::thread threadImpl_
 

Member Function Documentation

◆ join()

lib::Result<RES> join ( )
inline

put the caller into a blocking wait until this thread has terminated

Returns
intermediary token signalling either success or failure. The caller can find out by invoking isValid() or maybeThrow() on this result token. Moreover, if the thread function yields a result value, this value is copied into the token and can be retrieved either by type conversion, or with get<TY>(), value_or(default) or even with an alternative producer or_else(λ).

Definition at line 693 of file thread.hpp.

+ Inheritance diagram for ThreadJoinable< RES >:
+ Collaboration diagram for ThreadJoinable< RES >:

The documentation for this class was generated from the following file: