| INOS
    | 
#include <inos_syn.h>

| Public Member Functions | |
| CINOSMultiSync (const char *aName=0) | |
| void | Or (CINOSSync *aChild) | 
| void | And (CINOSSync *aChild) | 
| void | Remove (CINOSSync *aChild, bool aDelete=false) | 
| void | RemoveAll (bool aDelete=false) | 
| virtual uint32 | Wait (uint32 aTimeout=0xFFFFFFFF) override | 
| virtual uint32 | Wait (CINOSSync *&aChild, uint32 aTimeout=0xFFFFFFFF) | 
| virtual void | Reset () override | 
| virtual bool | UsesPolling () const override | 
| CINOSBus * | GetBus () | 
| void | SetBus (CINOSBus *apBus) | 
|  Public Member Functions inherited from CINOSSync | |
| CINOSSync (const char *aName=0, uint32 aInitialCount=0, bool aManual=false) | |
| virtual | ~CINOSSync () | 
| Destroy sync object. | |
| virtual const char * | GetName () | 
| Get name of sync object. | |
| virtual void | Signal () | 
| Put object into the signaled state. | |
| virtual void | SignalEx (CINOSTaskExMsg *apMsg, uint32 auRplId, uint32 auAppError) | 
| virtual bool | MsgEvent (CINOSTaskExMsg *apMsg) | 
| volatile uint32 * | GetLockAdr () | 
| Return pointer to core locking structure. | |
| bool | IsSame (CINOSSync *i_pSync) | 
| int | operator< (const CINOSSync &aSync) const | 
| int | operator== (const CINOSSync &aSync) const | 
| int | operator< (const char *aName) const | 
| int | operator== (const char *aName) const | 
| Protected Member Functions | |
| virtual bool | Signaled (CINOSSync *&aChild) override | 
| void | WakeUp () | 
| void | Cleanup () | 
| DECLARE_DYNAMIC (CINOSMultiSync) | |
|  Protected Member Functions inherited from CINOSSync | |
| virtual CINOSSyncNode * | GetNode () | 
| virtual void | SetNode (CINOSSyncNode *aNode) | 
| void | SignalAndUnlock (uint32 auMsr) | 
| Put object into the signaled state and release the core lock. | |
| Protected Attributes | |
| CINOSSyncNode * | pFirstChild | 
| CINOSSyncNode * | pLastChild | 
| CINOSExceptionCleanup * | pCleanup | 
| bool | m_bUsesPolling | 
| CINOSBus * | m_pBus | 
|  Protected Attributes inherited from CINOSSync | |
| const char * | m_pName | 
| name of sync object | |
| uint32 | m_uCount | 
| signaled count of object | |
| bool | m_bManual | 
| manual object yes/no | |
| tTaskId | m_idFstWaiting | 
| id of first task waiting for the sync object | |
| tTaskId | m_idLstWaiting | 
| id of last task waiting for the sync object | |
| SINOSCoreLock | m_Lock | 
| core lock | |
| CINOSSyncNode * | m_pNode | 
| pointer to object node (if any) | |
| Friends | |
| class | CINOSSyncNode | 
Wait for 1..n CINOSSync objects to become signaled. Each CINOSSync object can either be waited for 'or' or 'and'. All 'and' objects needs to be signaled in order for a 'multisync' to become signaled, while only one of the 'or' objects needs to become signaled.
The 'management' function (Add, Or, Remove, ...) of this class's objects of this class are not thread-safe, means that they are intended to be used by one task only. The Wait function, on the other hand, are thread-safe. Therefore, multiple tasks could be waiting for the same mutlisync object.
Note that with INOS_KERNEL, some seldom used features have been dropped to reduce complexity. Therefore, the following limiations exist:
| void CINOSMultiSync::And | ( | CINOSSync * | aChild | ) | 
add an 'and' child to the list of children (not reentrant, means: only one task is allowed to call that function at a time)
| 
 | inline | 
get/set bus used for bus sleep when polling (busy wait). if this is set to null, a relinquish is performed instead
| void CINOSMultiSync::Or | ( | CINOSSync * | aChild | ) | 
add an 'or' child to the list of children (not reentrant), means: only one task is allowed to call that function at a time)
| void CINOSMultiSync::Remove | ( | CINOSSync * | aChild, | 
| bool | aDelete = false | ||
| ) | 
remove child from the list of children (not reentrant, means: only one task is allowed to call that function at a time)
| aDelete | If true, aChild will be deleted | 
| void CINOSMultiSync::RemoveAll | ( | bool | aDelete = false | ) | 
remove all children from the list of children (not reentrant, means: only one task is allowed to call that function at a time)
| aDelete | If true, the CINOSSync* objects will be deleted | 
| 
 | overridevirtual | 
| 
 | overrideprotectedvirtual | 
Reimplemented from CINOSSync.
| 
 | inlineoverridevirtual | 
Reimplemented from CINOSSync.
| 
 | virtual | 
wait for signaled state for max. aTimeout usec and return child that caused the signal (not reentrant, means: only one task is allowed to call that function at a time)
| 
 | overridevirtual | 
wait for signaled state for max. aTimeout usec (not reentrant, means: only one task is allowed to call that function at a time)
Reimplemented from CINOSSync.