📄 jwl-gtf_convar.c
字号:
* 描述:取消挂起的进程 *
* 参数: ConVarID *
* ConVar *
* TaskID *
* Task *
* 返回: 参看JWL-GTF.h *
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_CancelAllConWait(jwl_gtf_ConVar *ConVar,jwl_gtf_u8 ConVarID)
{
jwl_gtf_TasCB *tmpTaskCB,*oldTaskCB,*Task;
jwl_gtf_ConVar *tmpConVar;
jwl_gtf_TaskMutex *tmpMutex;
if(ConVar==jwl_gtf_NULL)
{
if(tmpConVar=jwl_gtf_FindConVar(ConVarID)==jwl_gtf_NULL)
return jwl_gtf_NoConVarID;
}
else
tmpConVar=ConVar;
if(tmpConVar->jwl_gtf_Status!=jwl_gtf_ConVarUsed)
return jwl_gtf_ConVarNotUsed;
if(tmpConVar->jwl_gtf_ConVarLink==jwl_gtf_NULL)
return jwl_gtf_ConVarNotTask; /*条件变量中没有挂起的线程*/
tmpMutex=tmpConVar->jwl_gtf_Mutex;
tmpTaskCB=tmpConVar->jwl_gtf_ConVarLink;
Task=jwl_gtf_get_idle();
do
{
if(Task->jwl_gtf_TaskPro>tmpTaskCB->jwl_gtf_TaskPro)
Task=tmpTask;
oldTaskCB=tmpTaskCB:
tmpTaskCB=tmpTaskCB->jwl_gtf_EvenLink->Next;
oldTaskCB->jwl_gtf_EvenLink={jwl_gtf_NULL,jwl_gtf_NULL};
oldTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;
oldTaskCB->jwl_gtf_RetCode=jwl_gtf_HupUpTaskCancel;
if(oldTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwl_gtf_NULL}) /*断开超时链表*/
{
if(oldTaskCB->jwl_gtf_WaitTLink->Pre==oldTaskCB) /*在头部*/
{
if(oldTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL)
jwl_gtf_ConVarTOut=jwl_gtf_NULL;
else
{
jwl_gtf_ConVarTOut=jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Next;
jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Pre=jwl_gtf_ConVarTOut;
}
}
else if(oldTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL) /*尾部*/
oldTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL;
else /*其他*/
{
oldTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
oldTaskCB->jwl_gtf_WaitTLink->Next;
oldTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
oldTaskCB->jwl_gtf_WaitTLink->Pre;
}
oldTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL};
oldTaskCB->jwl_gtf_TimeOut=0;
}
oldTaskCB->jwl_gtf_ConVar=jwl_gtf_NULL;
}while(tmpTaskCB!=jwl_gtf_NULL);
if(TaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
{
tmpExchOCB=tmpTaskCB;
jwl_gtf_Switch
}
return jwl_gtf_Noerror;
}
/********************************************************************************************************
* jwl_gtf_ConVarSignal *
* 描述:接锁条件变量 *
* 参数: ConVarID *
* ConVar *
* 返回: 参看JWL-GTF.h *
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_ConVarSignal(jwl_gtf_TaskCB *ConVar,jwl_gtf_u8 ConVarID)
{
jwl_gtf_ConVar *tmpConVar;
jwl_gtf_TaskCB *tmpTaskCB;
jwl_gtf_TaskMutex *tmpMutex;
if(ConVar==jwl_gtf_NULL)
{
if(tmpConVar=jwl_gtf_FindConVar(ConVarID)==jwl_gtf_NULL)
return jwl_gtf_NoConVarID;
}
else
tmpConVar=ConVar;
if(tmpConVar->jwl_gtf_TaskStatus!=jwl_gtf_ConVarUsed)
return jwl_gtf_ConVarNotUsed;
if(tmpConVar->jwl_gtf_ConVarLink==jwl_gtf_NULL)
return jwl_gtf_ConVarNotTask;
tmpTaskCB=tmpConVar->jwl_gtf_ConVarLink;
tmpMutex=tmpConVar->jwl_gtf_Mutex;
if(tmpConvar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Next==jwl_gtf_NULL) /*只有一个挂起*/
{
tmpConVar->jwl_gtf_conVarLink=jwl_gtf_NULL;
tmpConVar->jwl_gtf_Mutex=jwl_gtf_NULL;
}
else
{
tmpConVar->jwl_gtf_ConVarLink=tmpConVar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Next;
tmpConVar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Pre=tmpConVar->jwl_gtf_ConVarLink;
}
tmpTaskCB->jwl_gtf_EvenLink={jwl_gtf_NULL,jwl_gtf_NULL};
tmpTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;
if(tmpTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwl_gtf_NULL}) /*断开超时链表*/
{
if(tmpTaskCB->jwl_gtf_WaitTLink->Pre==tmpTaskCB) /*在头部*/
{
if(tmpTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL)
jwl_gtf_ConVarTOut=jwl_gtf_NULL;
else
{
jwl_gtf_ConVarTOut=jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Next;
jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Pre=jwl_gtf_ConVarTOut;
}
}
else if(tmpTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL) /*尾部*/
tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL;
else /*其他*/
{
tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
tmpTaskCB->jwl_gtf_WaitTLink->Next;
tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
tmpTaskCB->jwl_gtf_WaitTLink->Pre;
}
tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL};
tmpTaskCB->jwl_gtf_TimeOut=0;
}
if(tmpMutex!=jwl_gtf_NULL)
jwl_gtf_MutexLock(0,tmpConVar->jwl_gtf_Mutex,0);
else
{
if(oldTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
{
tmpExchOCB=tmpTaskCB;
jwl_gtf_Switch
}
}
return Noerror;
}
/********************************************************************************************************
* jwl_gtf_SignalConSpec *
* 描述:解锁指定的条件变量 *
* 参数: ConVarID *
* ConVar *
* TaskCB *
* TaskID *
* 返回: 参看JWL-GTF.h *
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_ConVarSignal(jwl_gtf_TaskCB *ConVar,jwl_gtf_u8 ConVarID,jwl_gtf_TaskCB *TaskCB,\
jwl_gtf_u8 TaskID)
{
jwl_gtf_ConVar *tmpConVar;
jwl_gtf_TaskCB *tmpTaskCB;
jwl_gtf_TaskMutex *tmpMutex;
if(ConVar==jwl_gtf_NULL)
{
if(tmpConVar=jwl_gtf_FindConVar(ConVarID)==jwl_gtf_NULL)
return jwl_gtf_NoConVarID;
}
else
tmpConVar=ConVar;
if(tmpConVar->jwl_gtf_TaskStatus!=jwl_gtf_ConVarUsed)
return jwl_gtf_ConVarNotUsed;
if(TaskCB==jwl_gtf_NULL)
{
if(tmpTaskCB=jwl_gtf_FindTaskByID(TaskID)==jwl_gtf_NULL)
return jwl_gtf_NoTaskID;
}
else
tmpTaskCB=TaskCB;
if(tmpTask->jwl_gtf_ConVar!=tmpConVar)
{
if(tmpConVar->jwl_gtf_ConVarLink==jwl_gtf_NULL)
return jwl_gtf_ConVarNotTask;
tmpTaskCB=tmpConVar->jwl_gtf_ConVarLink;
tmpMutex=tmpConVar->jwl_gtf_Mutex;
if(tmpConvar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Next==jwl_gtf_NULL) /*只有一个挂起*/
{
tmpConVar->jwl_gtf_conVarLink=jwl_gtf_NULL;
tmpConVar->jwl_gtf_Mutex=jwl_gtf_NULL;
}
else
{
tmpConVar->jwl_gtf_ConVarLink=tmpConVar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Next;
tmpConVar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Pre=tmpConVar->jwl_gtf_ConVarLink;
}
tmpTaskCB->jwl_gtf_EvenLink={jwl_gtf_NULL,jwl_gtf_NULL};
tmpTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;
if(tmpTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwl_gtf_NULL}) /*断开超时链表*/
{
if(tmpTaskCB->jwl_gtf_WaitTLink->Pre==tmpTaskCB) /*在头部*/
{
if(tmpTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL)
jwl_gtf_ConVarTOut=jwl_gtf_NULL;
else
{
jwl_gtf_ConVarTOut=jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Next;
jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Pre=jwl_gtf_ConVarTOut;
}
}
else if(tmpTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL) /*尾部*/
tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL;
else /*其他*/
{
tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
tmpTaskCB->jwl_gtf_WaitTLink->Next;
tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
tmpTaskCB->jwl_gtf_WaitTLink->Pre;
}
tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL};
tmpTaskCB->jwl_gtf_TimeOut=0;
}
if(tmpMutex!=jwl_gtf_NULL)
jwl_gtf_MutexLock(0,tmpConVar->jwl_gtf_Mutex,0);
else
{
if(oldTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
{
tmpExchOCB=tmpTaskCB;
jwl_gtf_Switch
}
}
}
else
{
tmpTaskCB=tmpConVar->jwl_gtf_ConVarLink;
tmpMutex=tmpConVar->jwl_gtf_Mutex;
if(tmpConvar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Next==jwl_gtf_NULL) /*只有一个挂起*/
{
tmpConVar->jwl_gtf_conVarLink=jwl_gtf_NULL;
tmpConVar->jwl_gtf_Mutex=jwl_gtf_NULL;
}
else
{
tmpConVar->jwl_gtf_ConVarLink=tmpConVar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Next;
tmpConVar->jwl_gtf_ConVarLink->jwl_gtf_EvenLink->Pre=tmpConVar->jwl_gtf_ConVarLink;
}
tmpTaskCB->jwl_gtf_EvenLink={jwl_gtf_NULL,jwl_gtf_NULL};
tmpTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;
if(tmpTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwl_gtf_NULL}) /*断开超时链表*/
{
if(tmpTaskCB->jwl_gtf_WaitTLink->Pre==tmpTaskCB) /*在头部*/
{
if(tmpTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL)
jwl_gtf_ConVarTOut=jwl_gtf_NULL;
else
{
jwl_gtf_ConVarTOut=jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Next;
jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Pre=jwl_gtf_ConVarTOut;
}
}
else if(tmpTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL) /*尾部*/
tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL;
else /*其他*/
{
tmpTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
tmpTaskCB->jwl_gtf_WaitTLink->Next;
tmpTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
tmpTaskCB->jwl_gtf_WaitTLink->Pre;
}
tmpTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL};
tmpTaskCB->jwl_gtf_TimeOut=0;
}
if(tmpMutex!=jwl_gtf_NULL)
jwl_gtf_MutexLock(0,tmpConVar->jwl_gtf_Mutex,0);
else
{
if(oldTaskCB->jwl_gtf_TaskPro<jwl_gtf_TaskRun->jwl_gtf_TaskPro)
{
tmpExchOCB=tmpTaskCB;
jwl_gtf_Switch
}
}
}
return Noerror;
}
/********************************************************************************************************
* jwl_gtf_ConVarBroadcast *
* 描述:给自己连接的互斥量加锁 *
* 参数: ConVarID *
* ConVar *
* 返回: 参看JWL-GTF.h *
*********************************************************************************************************/
jwl_gtf_s8 jwl_gtf_ConVarBroacast(jwl_gtf_TaskCB *ConVar,jwl_gtf_u8 ConVarID)
{
jwl_gtf_ConVar *tmpConVar;
jwl_gtf_TaskCB *tmpTaskCB;
jwl_gtf_TaskMutex *tmpMutex;
if(ConVar==jwl_gtf_NULL)
{
if(tmpConVar=jwl_gtf_FindConVar(ConVarID)==jwl_gtf_NULL)
return jwl_gtf_NoConVarID;
}
else
tmpConVar=ConVar;
if(tmpConVar->jwl_gtf_TaskStatus!=jwl_gtf_ConVarUsed)
return jwl_gtf_ConVarNotUsed;
if(tmpConVar->jwl_gtf_ConVarLink==jwl_gtf_NULL)
return jwl_gtf_ConVarNotTask;
tmpTaskCB=tmpConVar->jwl_gtf_ConVarLink;
tmpMutex=tmpConVar->jwl_gtf_Mutex;
do
{
if(Task->jwl_gtf_TaskPro>tmpTaskCB->jwl_gtf_TaskPro)
Task=tmpTask;
oldTaskCB=tmpTaskCB:
tmpTaskCB=tmpTaskCB->jwl_gtf_EvenLink->Next;
oldTaskCB->jwl_gtf_EvenLink={jwl_gtf_NULL,jwl_gtf_NULL};
oldTaskCB->jwl_gtf_TaskStatus=jwl_gtf_Ready;
if(oldTaskCB->jwl_gtf_WaitTLink!={jwl_gtf_NULL,jwl_gtf_NULL}) /*断开超时链表*/
{
if(oldTaskCB->jwl_gtf_WaitTLink->Pre==oldTaskCB) /*在头部*/
{
if(oldTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL)
jwl_gtf_ConVarTOut=jwl_gtf_NULL;
else
{
jwl_gtf_ConVarTOut=jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Next;
jwl_gtf_ConVarTOut->jwl_gtf_WaitTLink->Pre=jwl_gtf_ConVarTOut;
}
}
else if(oldTaskCB->jwl_gtf_WaitTLink->Next==jwl_gtf_NULL) /*尾部*/
oldTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=jwl_gtf_NULL;
else /*其他*/
{
oldTaskCB->jwl_gtf_WaitTLink->Pre->jwl_gtf_WaitTLink->Next=\
oldTaskCB->jwl_gtf_WaitTLink->Next;
oldTaskCB->jwl_gtf_WaitTLink->Next->jwl_gtf_WaitTLink->Pre=\
oldTaskCB->jwl_gtf_WaitTLink->Pre;
}
oldTaskCB->jwl_gtf_WaitTLink={jwl_gtf_NULL,jwl_gtf_NULL};
oldTaskCB->jwl_gtf_TimeOut=0;
jwl_gtf_SpecMutexLock(0,tmpConVar->jwl_gtf_Mutex,oldTaskCB,0)
}
oldTaskCB->jwl_gtf_ConVar=jwl_gtf_NULL;
}while(tmpTaskCB!=jwl_gtf_NULL);
return Noerror;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -