c++ 中多线程 以及 timer 的使用
来源:互联网 发布:手游数据 编辑:程序博客网 时间:2024/06/05 17:05
RunCheckTaskThread() 开辟新的线程,在开辟新线程的时候为他创建了两种事件,一个是timer,一个是停止
CheckTask是新线程执行函数
.cpp文件
//任务检查线程void Task::RunCheckTaskThread(){ //创建两个事件 m_CheckTaskTimer = ::CreateWaitableTimer(NULL, FALSE, NULL); if (NULL==m_CheckTaskTimer) { MyException::ErrorMessage("[RunCheckTaskThread] CreateWaitableTimer Failed",REPORTERROR_POINTER_NULL); } m_CheckTaskStop = ::CreateEvent(NULL, TRUE, FALSE, NULL); if (NULL==m_CheckTaskStop) { MyException::ErrorMessage("[RunCheckTaskThread] CreateEvent Failed",REPORTERROR_POINTER_NULL); } //创建线程 m_CheckTaskThread=(HANDLE)::_beginthreadex(NULL,0,(unsigned (__stdcall*)(void*))CheckTask,(LPVOID)this,0,NULL); if (NULL==m_CheckTaskThread) { MyException::ErrorMessage("_beginthreadex create Thread Failed",REPORTERROR_POINTER_NULL); }}//检查是否有打印任务DWORD WINAPI CheckTask(PVOID lp){ Task* myTask=Task::GetTaskInstance(); //设置事件列表 const int eventLen=2; HANDLE hEvent[eventLen] = {0}; hEvent[0]=myTask->m_CheckTaskTimer; hEvent[1]=myTask->m_CheckTaskTimer; //设置timer LARGE_INTEGER dueTime; dueTime.QuadPart = 0; long lPeriod = 1000; ::SetWaitableTimer(myTask->m_CheckTaskTimer, &dueTime, lPeriod, NULL, NULL, 0); //进入timer循环 while(1) { DWORD nRet = ::WaitForMultipleObjects(eventLen, hEvent, FALSE, INFINITE); if(WAIT_OBJECT_0 == nRet) { break; } else if(WAIT_OBJECT_0 + 1 == nRet) { time_t curTime = time(NULL); //循环检查一遍是否有任务计划要执行 for (TaskVec::iterator iter=g_PlanInfo.begin();iter!=g_PlanInfo.end();iter++) { //检查1s内的需要打印的计划 if ((*iter).NextExcuteTime>curTime-1&&(*iter).NextExcuteTime<=curTime) { myTask->Lock(); g_TaskQue.push(*iter); myTask->UnLock(); } } } ::CancelWaitableTimer(myTask->m_CheckTaskTimer); ::CloseHandle(myTask->m_CheckTaskTimer); myTask->m_CheckTaskTimer = NULL; ::CloseHandle(myTask->m_CheckTaskStop); myTask->m_CheckTaskStop = NULL; } return 0;}
注意 下边的这两个函数都是静态的。
DWORD WINAPI CheckTask(PVOID lp);
Task::GetTaskInstance()
0 0
- c++ 中多线程 以及 timer 的使用
- WinForm程序中多线程与Timer的结合使用
- 黑马程序员---java中Timer类的介绍以及使用
- 关于objective-c中timer的简单使用
- C#Timer控件的使用
- java多线程--定时器Timer的使用
- java多线程定时器Timer的使用详解
- java中Timer的使用
- Java中Timer的使用
- Java中Timer的使用
- MFC中timer 的使用
- Java中Timer的使用
- Java中Timer的使用
- MFC中timer 的使用
- MFC中timer 的使用
- Flex中Timer的使用
- java中timer的使用
- C++中Timer的使用
- 第四讲:Activity入门指南
- Linux下端口被占用解决
- 2015暑假训练(UVALive 5983 - 5992)线段树离线处理+dp+floyed最短路
- 题目:最长单词
- IOS几种常见的实现扫描、生成二维码的方式(一、使用ZBar SDK)
- c++ 中多线程 以及 timer 的使用
- Android中Application类用法
- 最新微信记录恢复工具MMRecovery的下载与使用方法
- 最短路
- 题目:有效回文串
- 让开发人员自己做主
- Java 线程面试问题
- [知识点整理]Activity启动模式
- UVA 562 - Dividing coins