📄 mtask.c
字号:
/*
* Copyright (c) 2000-2008
* Author: Weiming Zhou
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
*/
#ifdef _WIN32
#include <windows.h>
#endif
#include "CapiGlobal.h"
#include "MTask.h"
/** 多任务资源释放的创建函数
@return MTASK * - 多任务释放结构指针
*/
MTASK *MTask_Create()
{
MTASK *pMTask;
pMTask = (MTASK *)malloc( sizeof(MTASK) );
if ( pMTask != NULL )
{
pMTask->pLock = LockCreate();
if ( pMTask->pLock == NULL )
{
free( pMTask );
return NULL;
}
pMTask->pExitEvent = EventCreate();
if ( pMTask->pExitEvent == NULL )
{
LockClose( pMTask->pLock );
free( pMTask );
return NULL;
}
pMTask->uTaskCount = 0;
pMTask->uExitFlag = MTASK_NO_EXIT;
}
return pMTask;
}
/** 多任务资源释放的释放函数
@param MTASK *pMTask - 多任务释放结构指针
@return void - 无
*/
void MTask_Destroy(MTASK *pMTask)
{
Lock( pMTask->pLock );
pMTask->uExitFlag = MTASK_EXIT;
if ( pMTask->uTaskCount != 0 )
{
Unlock( pMTask->pLock );
WaitEvent( pMTask->pExitEvent );
}
else
{
Unlock( pMTask->pLock );
}
/* 关闭操作的锁和退出事件 */
LockClose( pMTask->pLock );
EventClose( pMTask->pExitEvent );
free( pMTask );
}
/** 多任务资源释放的锁操作函数
@param MTASK *pMTask - 多任务释放结构指针
@return void - 无
*/
void MTask_Lock(MTASK *pMTask)
{
Lock( pMTask->pLock );
}
/** 多任务资源释放的解锁操作函数
@param MTASK *pMTask - 多任务释放结构指针
@return void - 无
*/
void MTask_Unlock(MTASK *pMTask)
{
Unlock( pMTask->pLock );
}
/** 多任务资源释放的获取退出标志函数
@param MTASK *pMTask - 多任务释放结构指针
@return UINT - 退出标志,MTASK_NO_EXIT表示不退出,MTASK_EXIT表示退出
*/
UINT MTask_GetExitFlag(MTASK *pMTask)
{
UINT uExitFlag;
Lock( pMTask->pLock );
uExitFlag = pMTask->uExitFlag;
Unlock( pMTask->pLock );
return uExitFlag;
}
/** 设置退出标志函数
@param MTASK *pMTask - 多任务释放结构指针
@param UINT uExitFlag - 退出标志,MTASK_NO_EXIT表示不退出,
MTASK_EXIT表示退出
@return void - 无
*/
void MTask_SetExitFlag(MTASK *pMTask, UINT uExitFlag)
{
Lock( pMTask->pLock );
pMTask->uExitFlag = uExitFlag;
Unlock( pMTask->pLock );
}
/** 进入操作任务函数,作用是使计数变量加1
@param MTASK *pMTask - 多任务释放结构指针
@return void - 无
*/
void MTask_EnterTask(MTASK *pMTask)
{
Lock( pMTask->pLock );
pMTask->uTaskCount += 1;
Unlock( pMTask->pLock );
}
/** 离开操作任务函数,作用是使计数变量减1,当计数变量为0时
发送退出事件通知释放操作任务可以释放了
@param MTASK *pMTask - 多任务释放结构指针
@return void - 无
*/
void MTask_LeaveTask(MTASK *pMTask)
{
Lock( pMTask->pLock );
pMTask->uTaskCount -= 1;
if ( pMTask->uTaskCount == 0 )
{
SendEvent( pMTask->pExitEvent );
}
Unlock( pMTask->pLock );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -