赞
踩
- Task task = NULL;
-
- //在子线程中启动一个循环去处理队列中的任务
- while(true){
-
- //定义一个bool变量标记是否退出循环,在循环开始时判断是否需要退出循环
- if(need_quit){
- break;
- }
-
- task = NULL;
- //从队列中获取任务
- task = task_queue.pop()
-
- //如果队列为空
- if(NULL == task){
- //当前线程进行睡眠状态,等待主线程添加任务并唤醒当前线程
- thread_sleep();
- //当线程被唤醒,继续当前循环
- continue;
- }
-
- //如果成功获取到任务则执行任务
- doTask(task);
- task.release();
- }
-
- //如果退出了循环
- //清理任务队列和资源
- if(task_queue){
- task_queue.clear();
- task_queue = NULL;
- }
- //退出线程
- thread_exit();
- //初始化
- void AsynTaskHandler::lazyInit()
- {
- //如果任务队列未初始化
- if (taskQueue == NULL)
- {
- //创建任务队列
- taskQueue = queue.create();
-
- // 创建线程
- thread_create();
- // 执行线程
- thead_execute();
-
- // 初始化退出标记为flase
- need_quit = false;
- }
- }
-
-
- // 添加任务
- void AsynTaskHandler::addTask(int task)
- {
- // 初始化
- lazyInit();
-
- // 添加到任务队列
- task_queue.add(task);
- // 唤醒工作线程
- thread_wakeup();
- }
- #include "AsynTaskHandler.h"
- #include "CCLuaEngine.h"
- #include
-
-
-
-
- //#include
-
-
-
-
-
- // 单例
- static AsynTaskHandler *s_pAsynTask = NULL;
- // 任务队列
- static CCArray* s_taskQueue = NULL
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。