VC++多线程应用--代码清单三:事件TASK
来源:互联网 发布:seo研究中心谭州学院 编辑:程序博客网 时间:2024/04/27 22:19
#ifndef _TASK_H
#define _TASK_H
#pragma once
#include ".MyEvent.h"
#include ".Listener.h"
class __declspec(dllexport) CTask
...{
public:
CTask();
~CTask();
void SetListener(CListener*);
CListener* GetListener(void);
void SetEvent(CMyEvent*);
CMyEvent* GetEvent(void);
protected:
CListener* listener_p;
CMyEvent m_Event;
};
#endif
#define _TASK_H
#pragma once
#include ".MyEvent.h"
#include ".Listener.h"
class __declspec(dllexport) CTask
...{
public:
CTask();
~CTask();
void SetListener(CListener*);
CListener* GetListener(void);
void SetEvent(CMyEvent*);
CMyEvent* GetEvent(void);
protected:
CListener* listener_p;
CMyEvent m_Event;
};
#endif
#include "stdafx.h"
#include ".Task.h"
CTask::CTask()
...{
}
CTask::~CTask()
...{
}
void CTask::SetListener(CListener* object_p)
...{
this->listener_p = object_p;
}
CListener* CTask::GetListener()
...{
return listener_p;
}
void CTask::SetEvent(CMyEvent* event_p)
...{
m_Event.m_InitialTick = event_p->m_InitialTick;
m_Event.m_NowTick = event_p->m_NowTick;
m_Event.m_Priority = event_p->m_Priority;
m_Event.m_Trigger = event_p->m_Trigger;
event_p->parameter_p->Copy(&(m_Event.parameter_p));
}
CMyEvent* CTask::GetEvent()
...{
return &m_Event;
}
#include ".Task.h"
CTask::CTask()
...{
}
CTask::~CTask()
...{
}
void CTask::SetListener(CListener* object_p)
...{
this->listener_p = object_p;
}
CListener* CTask::GetListener()
...{
return listener_p;
}
void CTask::SetEvent(CMyEvent* event_p)
...{
m_Event.m_InitialTick = event_p->m_InitialTick;
m_Event.m_NowTick = event_p->m_NowTick;
m_Event.m_Priority = event_p->m_Priority;
m_Event.m_Trigger = event_p->m_Trigger;
event_p->parameter_p->Copy(&(m_Event.parameter_p));
}
CMyEvent* CTask::GetEvent()
...{
return &m_Event;
}
TASKPOOL
#ifndef _TASKPOOL_H
#define _TASKPOOL_H
#pragma once
#include ".CircularLinkList.h"
#include ".TaskElement.h"
class __declspec(dllexport) CTaskPool
...{
public:
CTaskPool(void);
~CTaskPool(void);
void Initial(void);
void RaiseTask(CMyEvent*, CListener*);
void Prepare(void);
bool GetReadyEvent(CTokenElement**);
bool GetReadyEvent(CNote**);
void ReadyTaskMoveToFinishList(CNote*);
void ReadyTaskMoveToRunningList(CNote*);
void RunningTaskMoveToFinishList(CNote*);
void ReadyTaskMoveToBlockList(CNote*);
void BlockTaskMoveToReadyList(CNote*);
void Free(void);
private:
CCircularLinkList m_ReadyList;
CCircularLinkList m_RunningList;
CCircularLinkList m_FinishList;
CCircularLinkList m_BlockList;
CCriticalSection m_CriticalSection;
};
#endif/* _EVENTCELL_H */
#define _TASKPOOL_H
#pragma once
#include ".CircularLinkList.h"
#include ".TaskElement.h"
class __declspec(dllexport) CTaskPool
...{
public:
CTaskPool(void);
~CTaskPool(void);
void Initial(void);
void RaiseTask(CMyEvent*, CListener*);
void Prepare(void);
bool GetReadyEvent(CTokenElement**);
bool GetReadyEvent(CNote**);
void ReadyTaskMoveToFinishList(CNote*);
void ReadyTaskMoveToRunningList(CNote*);
void RunningTaskMoveToFinishList(CNote*);
void ReadyTaskMoveToBlockList(CNote*);
void BlockTaskMoveToReadyList(CNote*);
void Free(void);
private:
CCircularLinkList m_ReadyList;
CCircularLinkList m_RunningList;
CCircularLinkList m_FinishList;
CCircularLinkList m_BlockList;
CCriticalSection m_CriticalSection;
};
#endif/* _EVENTCELL_H */
#include "StdAfx.h"
#include ".TaskPool.h"
CTaskPool::CTaskPool(void)
...{
}
CTaskPool::~CTaskPool(void)
...{
}
void CTaskPool::Initial(void)
...{
m_CriticalSection.Lock();
m_CriticalSection.Unlock();
}
void CTaskPool::RaiseTask(CMyEvent* event_p, CListener* listener_p)
...{
CTaskElement* taskElement_p;
CTask* task_p;
m_CriticalSection.Lock();
task_p = new CTask();
task_p->SetEvent(event_p);
task_p->SetListener(listener_p);
taskElement_p = new CTaskElement();
taskElement_p->Set(task_p);
m_ReadyList.AppendTail((CTokenElement*)taskElement_p);
m_CriticalSection.Unlock();
}
void CTaskPool::Prepare(void)
...{
CNote* note_p;
m_CriticalSection.Lock();
/**//* ↓↓↓Remove finish task↓↓↓ */
while(m_FinishList.GetHeader(¬e_p))...{
m_FinishList.Remove(note_p);
}
/**//* ↑↑↑Remove finish task↑↑↑ */
while (m_BlockList.GetHeader(¬e_p))...{
BlockTaskMoveToReadyList(note_p);
}
m_CriticalSection.Unlock();
}
bool CTaskPool::GetReadyEvent(CTokenElement** element_dp)
...{
CNote* note_p;
bool result = false;
m_CriticalSection.Lock();
if (m_ReadyList.GetHeader(¬e_p))...{
*element_dp = note_p->element_p;
result = true;
}
m_CriticalSection.Unlock();
return result;
}
bool CTaskPool::GetReadyEvent(CNote** node_dp)
...{
m_CriticalSection.Lock();
return m_ReadyList.GetHeader(node_dp);
m_CriticalSection.Unlock();
}
void CTaskPool::ReadyTaskMoveToFinishList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_ReadyList.PullOut(node_p);
m_FinishList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::ReadyTaskMoveToRunningList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_ReadyList.PullOut(node_p);
m_RunningList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::RunningTaskMoveToFinishList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_RunningList.PullOut(node_p);
m_FinishList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::ReadyTaskMoveToBlockList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_ReadyList.PullOut(node_p);
m_BlockList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::BlockTaskMoveToReadyList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_BlockList.PullOut(node_p);
m_ReadyList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::Free(void)
...{
m_CriticalSection.Lock();
this->m_FinishList.Free();
this->m_BlockList.Free();
this->m_ReadyList.Free();
this->m_RunningList.Free();
m_CriticalSection.Unlock();
}
#include ".TaskPool.h"
CTaskPool::CTaskPool(void)
...{
}
CTaskPool::~CTaskPool(void)
...{
}
void CTaskPool::Initial(void)
...{
m_CriticalSection.Lock();
m_CriticalSection.Unlock();
}
void CTaskPool::RaiseTask(CMyEvent* event_p, CListener* listener_p)
...{
CTaskElement* taskElement_p;
CTask* task_p;
m_CriticalSection.Lock();
task_p = new CTask();
task_p->SetEvent(event_p);
task_p->SetListener(listener_p);
taskElement_p = new CTaskElement();
taskElement_p->Set(task_p);
m_ReadyList.AppendTail((CTokenElement*)taskElement_p);
m_CriticalSection.Unlock();
}
void CTaskPool::Prepare(void)
...{
CNote* note_p;
m_CriticalSection.Lock();
/**//* ↓↓↓Remove finish task↓↓↓ */
while(m_FinishList.GetHeader(¬e_p))...{
m_FinishList.Remove(note_p);
}
/**//* ↑↑↑Remove finish task↑↑↑ */
while (m_BlockList.GetHeader(¬e_p))...{
BlockTaskMoveToReadyList(note_p);
}
m_CriticalSection.Unlock();
}
bool CTaskPool::GetReadyEvent(CTokenElement** element_dp)
...{
CNote* note_p;
bool result = false;
m_CriticalSection.Lock();
if (m_ReadyList.GetHeader(¬e_p))...{
*element_dp = note_p->element_p;
result = true;
}
m_CriticalSection.Unlock();
return result;
}
bool CTaskPool::GetReadyEvent(CNote** node_dp)
...{
m_CriticalSection.Lock();
return m_ReadyList.GetHeader(node_dp);
m_CriticalSection.Unlock();
}
void CTaskPool::ReadyTaskMoveToFinishList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_ReadyList.PullOut(node_p);
m_FinishList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::ReadyTaskMoveToRunningList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_ReadyList.PullOut(node_p);
m_RunningList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::RunningTaskMoveToFinishList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_RunningList.PullOut(node_p);
m_FinishList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::ReadyTaskMoveToBlockList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_ReadyList.PullOut(node_p);
m_BlockList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::BlockTaskMoveToReadyList(CNote* node_p)
...{
m_CriticalSection.Lock();
m_BlockList.PullOut(node_p);
m_ReadyList.PushIn(node_p);
m_CriticalSection.Unlock();
}
void CTaskPool::Free(void)
...{
m_CriticalSection.Lock();
this->m_FinishList.Free();
this->m_BlockList.Free();
this->m_ReadyList.Free();
this->m_RunningList.Free();
m_CriticalSection.Unlock();
}
- VC++多线程应用--代码清单三:事件TASK
- VC++多线程应用--代码清单五:多线程
- VC++多线程应用--代码清单一:节点
- VC++多线程应用--代码清单二:链表
- VC++多线程应用--代码清单四:POOL
- VC++多线程应用--代码清单六:定时
- 多线程应用(三)
- VC++多线程,互斥对象,事件对象,关键代码段实现线程同步
- 事件深入应用三
- 多线程进阶代码三
- VC多线程信号量的应用
- 多线程同步的三种方法-互斥量-事件对象-关键代码段(临界区)
- VC++6.0 快捷键清单
- 多线程三(同步代码块)
- 浏览器事件清单
- android 多线程应用 下载代码
- 多线程技术在VC中的应用
- 随机分配效果在task中的应用,公司内部代码片
- 用TSQL求子串在父串中出现的次数
- 转-80后男士征婚标准(巨经典)
- 真奇妙美容食谱
- Spring学习笔记(4)
- vc编译器选项
- VC++多线程应用--代码清单三:事件TASK
- 面朝大海,春暖花开
- 为操作系统减肥(使用一键还原精灵前的步骤)
- C#中时间比较函数
- 又学习了一点
- 当程序员转行去做销售
- 个人电脑常被入侵破坏方式 我有金钟罩
- 手机基础知识汇总
- 系统分析师考试大纲