|
给出例子。
- CeSetThreadPriority(GetCurrentThread(), pMcuCtl->dwPriority256);
- //在进入等待之前就获取了当前线程的优先级。并设置,我这里设置的很低100多后面了。。。
- //Sleep(1); //等待信号量
- while (1)
- { //第一阶段: 等待信号量出现
- dwRet = WaitForMultipleObjects(2, rghEvents, FALSE, INFINITE);
- if(pMcuCtl->bDeinit)
- {
- return 0;//如果检测到反初始化事件,退出等待信号量
- }
- //第二阶段: 判断实际信号量类型
- switch(dwRet)
- {
- case WAIT_OBJECT_0:
- RETAILMSG(1, (TEXT("mcu_DetectThread Wait deinit\r\n")));
- //deinit event
- //判断是deinit线程既退出
- return 0;
- break;
- case WAIT_OBJECT_0+1:
- //gpio interrupted event
- //检测到GPIO中断进程事件
- //建议第一次调试的时候请打开try进行预先测试
- {
- //RETAILMSG(1, (TEXT("mcu_DetectThread Wait gio\r\n")));
- //__try
- //{
- //第三阶段: 读写的工作
- OperationCS8953(READ, &sendOut[0], 2); //产生中断即进行读写MCU的工作
- #if 1
- RETAILMSG(1,(TEXT("the %d number SentOut Value for point variable is %x\r\n"),i,sendOut[i]));
- //Skill:xxxxx
- // sndPlaySound(_T("question.wav"),SND_FILENAME|SND_NODEFAULT);
- #endif
- //完成try的出错抛出处理
- //}
- //__except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
- //{
- // RETAILMSG(1, (TEXT("Emcu_DetectThread MCU_gio!!!!\r\n")));
- // SetLastError(E_FAIL);
- //}
- //SetEvent(gReadKeyEvent[0]); //这里我们建议采用采集信号量来代替采集事件,
-
- if (!ReleaseSemaphore(
- gReadKeyEvent[0], // 要增加的信号量。
- 1, // 增加1.
- NULL) ) // 不想返回前一次信号量。
- {
- //do noting.
- }
- }
- break;
- default:
- //error
- //出错处理
- dwAction = 0x00;//MCU_STAT_NOCHANGE;
- break;
- }
复制代码 |
|