AUI Framework  master
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
AThread Class Reference

Represents a user-defined thread.

#include <AUI/Thread/AThread.h>

Classes#

class  Interrupted
 Exception that is thrown by AThread::interruptionPoint(), if interruption is requested for this thread. Handled by AThread::start. More...
 

Public Member Functions#

 AThread (std::function< void()> functor)
 
void detach ()
 
void start ()
 Start thread execution.
 
bool isInterrupted () override
 
void resetInterruptFlag () override
 Reset interruption flag.
 
void interrupt () override
 Interrupt thread's execution.
 
void join ()
 Waits for thread to be finished.
 
- Public Member Functions inherited from AAbstractThread
id getId () const
 
void enqueue (AMessageQueue<>::Message f)
 Delivers task for execution (message) to this thread's event queue. Messages are processed by framework itself using AEventLoop. This behaviour may be overwritten using the AThread::processMessages() function.
 
const AMessageQueuemessageQueue () const
 
IEventLoopgetCurrentEventLoop () const
 Get current event loop for this thread.
 
template<class Callable>
void operator<< (Callable fun)
 Enqueue message to make.
 
template<class Callable>
void operator* (Callable fun)
 Enqueue message to make. Helper function for async, asyncX, ui, uiX.
 
const AStringthreadName () const noexcept
 
AStacktrace threadStacktrace () const
 Retrieve stacktrace of the thread.
 
bool messageQueueEmpty () noexcept
 
- Public Member Functions inherited from AObject
_< AObjectsharedPtr ()
 
_weak< AObjectweakPtr ()
 
template<typename Connectable, ACompatibleSlotFor< Connectable > Function>
decltype(auto) connect (const Connectable &connectable, Function &&function)
 Connects signal or property to slot of "this" object.
 
void setSignalsEnabled (bool enabled)
 
bool isSignalsEnabled () const noexcept
 
template<ASignalInvokable T>
void operator^ (T &&t) noexcept
 
_< AAbstractThreadgetThread () const
 
bool isSlotsCallsOnlyOnMyThread () const noexcept
 
void setSlotsCallsOnlyOnMyThread (bool slotsCallsOnlyOnMyThread)
 
- Public Member Functions inherited from AObjectBase
 AObjectBase (AObjectBase &&rhs) noexcept
 
 AObjectBase (const AObjectBase &rhs) noexcept
 
AObjectBaseoperator= (const AObjectBase &rhs) noexcept
 
AObjectBaseoperator= (AObjectBase &&rhs) noexcept
 
- Public Member Functions inherited from aui::noncopyable
 noncopyable (const noncopyable &)=delete
 
noncopyableoperator= (const noncopyable &)=delete
 

Static Public Member Functions#

static const _< AAbstractThread > & main () noexcept
 Returns main thread of the application.
 
static void sleep (std::chrono::milliseconds duration)
 Sleep for specified duration. Most operation systems guarantee that elasped time will be greater than specified. AThread::interrupt() is supported.
 
static _< AAbstractThreadcurrent ()
 
static void interruptionPoint ()
 Interruption point.
 
static void setName (AString name) noexcept
 
static void processMessages ()
 Processes messages from other threads of current thread. Called by framework itself using IEventLoop.
 
- Static Public Member Functions inherited from AObject
static void disconnect ()
 
template<AAnySignal Signal, aui::derived_from< AObjectBase > Object, ACompatibleSlotFor< Signal > Function>
static decltype(auto) connect (const Signal &signal, Object *object, Function &&function)
 Connects signal to the slot of the specified object.
 
template<AAnyProperty Property, aui::derived_from< AObjectBase > Object, typename Function>
static decltype(auto) connect (const Property &property, Object *object, Function &&function)
 Connects property to the slot of the specified object.
 
template<APropertyReadable PropertySource, APropertyWritable PropertyDestination>
requires requires { { *propertySource } -> aui::convertible_to<std::decay_t<decltype(*propertyDestination)>>; }
static void connect (PropertySource &&propertySource, PropertyDestination &&propertyDestination)
 Connects source property to the destination property.
 
template<APropertyWritable PropertySource, APropertyWritable PropertyDestination>
requires requires { { *propertySource } -> aui::convertible_to<std::decay_t<decltype(*propertyDestination)>>; { *propertyDestination } -> aui::convertible_to<std::decay_t<decltype(*propertySource)>>; }
static void biConnect (PropertySource &&propertySource, PropertyDestination &&propertyDestination)
 Connects source property to the destination property and opposite (bidirectionally).
 
template<AAnySignalOrProperty Connectable, aui::derived_from< AObjectBase > Object, ACompatibleSlotFor< Connectable > Function>
static decltype(auto) connect (const Connectable &connectable, Object &object, Function &&function)
 Connects signal or property to the slot of the specified object.
 
template<AAnySignalOrProperty Connectable, aui::derived_from< AObjectBase > Object, ACompatibleSlotFor< Connectable > Function>
static decltype(auto) connect (const Connectable &connectable, _< Object > object, Function &&function)
 Connects signal or property to the slot of the specified object.
 
template<AAnySignalOrProperty Connectable, aui::derived_from< AObjectBase > Object, typename Function>
static decltype(auto) connect (const Connectable &connectable, ASlotDef< Object *, Function > slotDef)
 Connects signal to the slot of the specified object. Slot is packed to single argument.
 
template<AAnyProperty Property, typename Object, ACompatibleSlotFor< Property > Function>
requires (!aui::derived_from<Object, AObject>)
static void connect (const Property &property, _< Object > object, Function &&function)
 Connects signal or property to the slot of the specified non-AObject type.
 
static void moveToThread (aui::no_escape< AObject > object, _< AAbstractThread > thread)
 

Additional Inherited Members#

- Public Types inherited from AAbstractThread
typedef std::thread::id id
 Thread ID type.
 
- Static Public Attributes inherited from AObject
static constexpr AObjectBaseGENERIC_OBSERVER = nullptr
 Indicates that a connection should not be explicitly linked to receiver's lifetime.
 
- Static Public Attributes inherited from AObjectBase
static ASpinlockMutex SIGNAL_SLOT_GLOBAL_SYNC
 
- Protected Member Functions inherited from AAbstractThread
 AAbstractThread (const id &id) noexcept
 
void updateThreadName () noexcept
 
virtual void processMessagesImpl ()
 
- Protected Member Functions inherited from AObject
void setThread (_< AAbstractThread > thread)
 Set thread of the object.
 
- Protected Member Functions inherited from AObjectBase
void clearAllIngoingConnections () noexcept
 
virtual void handleSlotException (std::exception_ptr exception)
 Called then an exception has thrown during slot processing of the signal emitted by this object.
 
- Protected Attributes inherited from AAbstractThread
id mId
 Thread ID.
 
AString mThreadName
 
AMessageQueue mMessageQueue
 

Member Function Documentation#

◆ current()#

static _< AAbstractThread > AThread::current ( )
static
Returns
current thread.

◆ interrupt()#

void AThread::interrupt ( )
overridevirtual

Raises the interruption flag of the thread. In order to check whether thread interrupted use AThread::interruptionPoint() or AAbstractThread::isInterrupted().

Reimplemented from AAbstractThread.

◆ interruptionPoint()#

static void AThread::interruptionPoint ( )
static

If the interruption flag is raised for the caller thread then flag is reset and AThread::Interrupted exception is thrown, efficiently stopping the task execution and safely freeing resources with C++'s RAII feature.

async, asyncX, AThreadPool::enqueue, AUI_ENTRY handle AThread::Interrupted, so throwing AThread::Interrupted is safe.

◆ isInterrupted()#

bool AThread::isInterrupted ( )
overridevirtual
Returns
true if interrupt requested for this thread.

Reimplemented from AAbstractThread.

◆ resetInterruptFlag()#

void AThread::resetInterruptFlag ( )
overridevirtual

Reimplemented from AAbstractThread.

◆ setName()#

static void AThread::setName ( AString name)
inlinestaticnoexcept

Sets name of the current thread for debugger.

Parameters
namenew name of the thread

◆ sleep()#

static void AThread::sleep ( std::chrono::milliseconds duration)
static
Parameters
durationsleep duration.