线程池:

线程池构思:

  初始化线程池时,创建指定数量的线程,并将其全部放入空闲线程堆中。当添加任务时,判断是否有空闲线程,若有,则弹出一个空线程执行该任务,并将该线程添加到正在执行的线程列表中;若没有空闲线程则将任务添加到任务队列中。待任务执行完后,标记该任务状态为已完成,再查看任务队列中是否仍有任务,若有则弹出一个新任务,并将其附加到该线程中继续执行,若没有新任务,则将该线程从正在执行的线程列表中移除并放入空闲线程堆。执行完的任务立即删除或创建任务者后续删除。暂停的时候,将正在执行的线程列表中的所有线程暂停。销毁线程池时,将正在执行的线程列表和空闲线程集内的所有线程销毁。(也可以将正在执行的线程列表和空闲线程堆合并为一个线程集,给线程标记空闲或执行中)

  具体类如下:

   CMyMutex类: 引入windows.h下的CRITICAL_SECTION(临界区),然后初始化临界区、进入临界区、离开临界区。

   CMyTask类:执行具体任务、获取ID、退出、获取状态等。(临界区保证资源独占)

   CMyQueue类:关联CMyMutex类和CMyTask类;包括弹出任务、前or后端添加任务、获取任务数、判断任务是否为空、清空任务等。(队列管理任务,不负责任务的创建、销毁)

   CMyThread类:前置声明类:CTask、 CBaseThreadPool,包含启动线程、暂停线程、恢复线程、附加任务、开始任务、是否退出等,友类CMyThreadPool。  

    创建一个线程:m_hThread=CreateThread(0,0,threadProc,this,0,&m_threadID);  

    关闭该线程:CloseHandle(m_hThread);  执行完任务后,将该线程设置为空线程。(线程创建后的暂停、恢复,通过设置事件、等待信号量来完成)    

   CMyList类:前置线程类,添加、移除、清空,计算数量、判断是否为空等(临界区保证资源独占)

   CMyStack类:堆栈从开头推入、弹出线程,清空线程、计算数量、判断是否为空等(临界区保证资源独占)

   CBaseThreadPool类:分配活动线程的抽象类。

   CMyThreadPool类:线程池类继承CBaseThreadPool,实现分发线程。

 

posted @ 2015-08-17 18:24  慧由心生  阅读(248)  评论(0编辑  收藏  举报