Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
SC::AsyncExternalCompletion Struct Reference

Integrates externally-submitted completion based operations with AsyncEventLoop. More...

#include <Async.h>

Inheritance diagram for SC::AsyncExternalCompletion:
SC::AsyncRequest

Classes

struct  CompletionData
 

Public Types

using Result = AsyncResultOf<AsyncExternalCompletion, CompletionData>
 
- Public Types inherited from SC::AsyncRequest
enum class  Type : uint8_t {
  LoopTimeout ,
  LoopWakeUp ,
  LoopWork ,
  ProcessExit ,
  Signal ,
  SocketAccept ,
  SocketConnect ,
  SocketSend ,
  SocketSendTo ,
  SocketReceive ,
  SocketReceiveFrom ,
  FileRead ,
  FileWrite ,
  FileSend ,
  FileReadiness ,
  ExternalCompletion ,
  FileSystemOperation
}
 Type of async request. More...
 

Public Member Functions

SC::Result start (AsyncEventLoop &eventLoop)
 Starts a manual external completion. The request remains active until postExternalCompletion() or stop().
 
SC::Result markSubmissionPending ()
 Marks that a native/manual external operation has been submitted and must complete before reuse.
 
SC::Result clearSubmissionPending ()
 Clears a pending submission after an external submission failed synchronously.
 
bool hasSubmissionPending () const
 
- Public Member Functions inherited from SC::AsyncRequest
void setDebugName (const char *newDebugName)
 
void executeOn (AsyncSequence &sequence)
 Adds the request to be executed on a specific AsyncSequence.
 
Result executeOn (AsyncTaskSequence &task, ThreadPool &pool)
 Adds the request to be executed on a specific AsyncTaskSequence.
 
void disableThreadPool ()
 Disables the thread-pool usage for this request.
 
 AsyncRequest (Type type)
 Constructs a free async request of given type.
 
Result stop (AsyncEventLoop &eventLoop, Function< void(AsyncResult &)> *afterStopped=nullptr)
 Ask to stop current async operation.
 
bool isFree () const
 Returns true if this request is free.
 
bool isCancelling () const
 Returns true if this request is being cancelled.
 
bool isActive () const
 Returns true if this request is active or being reactivated.
 
Type getType () const
 Returns request type.
 
Result start (AsyncEventLoop &eventLoop)
 Shortcut for AsyncEventLoop::start.
 
void setUserFlags (uint16_t externalFlags)
 Sets user flags, holding some meaningful data for the caller.
 
uint16_t getUserFlags () const
 Gets user flags, holding some meaningful data for the caller.
 
Function< void(AsyncResult &)> * getCloseCallback ()
 Returns currently set close callback (if any) passed to AsyncRequest::stop.
 
const Function< void(AsyncResult &)> * getCloseCallback () const
 

Public Attributes

Function< void(Result &)> callback
 
- Public Attributes inherited from SC::AsyncRequest
AsyncRequestnext = nullptr
 
AsyncRequestprev = nullptr
 

Friends

struct AsyncEventLoop
 

Additional Inherited Members

- Protected Member Functions inherited from SC::AsyncRequest
Result checkState ()
 
void queueSubmission (AsyncEventLoop &eventLoop)
 
AsyncTaskSequencegetTask ()
 
- Protected Attributes inherited from SC::AsyncRequest
AsyncSequencesequence = nullptr
 

Detailed Description

Integrates externally-submitted completion based operations with AsyncEventLoop.

Manual mode is created with start(eventLoop) and completed with AsyncEventLoop::postExternalCompletion(). On Windows, native mode is created with start(eventLoop, handle) and completed by IOCP using getWindowsOverlapped().

Member Function Documentation

◆ clearSubmissionPending()

SC::Result SC::AsyncExternalCompletion::clearSubmissionPending ( )

Clears a pending submission after an external submission failed synchronously.

◆ markSubmissionPending()

SC::Result SC::AsyncExternalCompletion::markSubmissionPending ( )

Marks that a native/manual external operation has been submitted and must complete before reuse.

◆ start()

SC::Result SC::AsyncExternalCompletion::start ( AsyncEventLoop & eventLoop)

Starts a manual external completion. The request remains active until postExternalCompletion() or stop().


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