123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #ifndef cmTaskMgr_h
- #define cmTaskMgr_h
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- enum
- {
- kOkTmRC,
- kThreadFailTmRC,
- kInvalidArgTmRC,
- kOpFailTmRC,
- kQueueFailTmRC,
- kTestFailTmRC
- };
-
- typedef cmRC_t cmTmRC_t;
-
- typedef cmHandle_t cmTaskMgrH_t;
-
- extern cmTaskMgrH_t cmTaskMgrNullHangle;
-
- typedef enum
- {
- kInvalidTmId,
- kQueuedTmId, // The task is waiting in the queue.
- kQueuedPausedTmId, // The task is waiting in the queue but is deferred.
- kStartedTmId, // The task is running.
- kCompletedTmId, // The task successfully completed.
- kKilledTmId // The task was killed by the client.
- } cmStatusTmId_t;
-
- typedef enum
- {
- kStatusTmId, // Task status updates. These are automatically sent by the system when the task instance changes state.
- kProgTmId, // Task progress update. The user function should increment the 'prog' toward 'progCnt'.
- kErrorTmId //
- } cmSelTmId_t;
-
- typedef enum
- {
- kStartTmId,
- kPauseTmId,
- kKillTmId
- } cmTaskMgrCtlId_t;
-
-
- typedef struct cmTaskMgrStatusArg_str
- {
- void* arg;
- unsigned instId;
- cmSelTmId_t selId;
- cmStatusTmId_t statusId;
- unsigned prog;
- const cmChar_t* msg;
- void* result;
- unsigned resultByteCnt;
- } cmTaskMgrStatusArg_t;
-
- typedef void (*cmTaskMgrStatusCb_t)( const cmTaskMgrStatusArg_t* status );
-
- typedef struct cmTaskMgrFuncArg_str
- {
- void* arg; // 'funcArg' provided by cmTaskMgrCall();
- unsigned argByteCnt; // 'funcArgByteCnt' provided by cmTaskMgrCall()
- unsigned instId; // Task instance id.
- cmTaskMgrStatusCb_t statusCb; // Status update function provided by cmTaskMgrCreate().
- void* statusCbArg; // Status update function arg. provided by cmTaskMgrCreate().
- unsigned progCnt; // Maximum expected value of cmTaskMgrStatusArg_t.prog during execution of this task instance.
- cmTaskMgrCtlId_t* cmdIdPtr; // Command id used to inform the running task that it should pause or exit.
- unsigned pauseSleepMs; // Length of time to sleep if the task receives a pause command.
- } cmTaskMgrFuncArg_t;
-
- typedef void (*cmTaskMgrFunc_t)(cmTaskMgrFuncArg_t* arg );
-
- cmTmRC_t cmTaskMgrCreate(
- cmCtx_t* ctx,
- cmTaskMgrH_t* hp,
- cmTaskMgrStatusCb_t statusCb,
- void* statusCbArg,
- unsigned threadCnt,
- unsigned queueByteCnt,
- unsigned pauseSleepMs );
-
- cmTmRC_t cmTaskMgrDestroy( cmTaskMgrH_t* hp );
-
- bool cmTaskMgrIsValid( cmTaskMgrH_t h );
-
- // Called by the client to give the task mgr an opportunity to execute
- // period functions from within the client thread. Note that 'statusCb()'
- // (as passed to cmTaskMgrCreate()) is only called within this function
- // This guarantees that all communication with the client occurs in the
- // clients thread.
- cmTmRC_t cmTaskMgrOnIdle( cmTaskMgrH_t h );
-
- // Pause/unpause the task mgr.
- bool cmTaskMgrIsEnabled( cmTaskMgrH_t h );
- cmTmRC_t cmTaskMgrEnable( cmTaskMgrH_t h, bool enableFl );
-
- // Install a task function and associate it with a label and unique id.
- cmTmRC_t cmTaskMgrInstall( cmTaskMgrH_t h, unsigned taskId, const cmChar_t* label, cmTaskMgrFunc_t func );
-
- // Queue a task.
- cmTmRC_t cmTaskMgrCall(
- cmTaskMgrH_t h,
- unsigned taskId,
- void* funcArg,
- unsigned progCnt,
- unsigned* retInstIdPtr );
-
- // Start,pause, or kill a task.
- // If a queued task is paused then it will remain at the front of the queue
- // and tasks behdind it in the queue will be executed.
- cmTmRC_t cmTaskMgrTaskCtl( cmTaskMgrH_t h, unsigned instId, cmTaskMgrCtlId_t ctlId );
-
- // Get the status of a task.
- cmStatusTmId_t cmTaskMgrStatus( cmTaskMgrH_t h, unsigned instId );
-
-
- const void* cmTaskMgrResult( cmTaskMgrH_t h, unsigned instId );
- unsigned cmTaskMgrResultByteCount( cmTaskMgrH_t h, unsigned instId );
- cmTmRC_t cmTaskMgrResultDelete( cmTaskMgrH_t h, unsigned instId );
-
- cmTmRC_t cmTaskMgrTest(cmCtx_t* ctx);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
|