基于线程的WINCE测试程序

来源:互联网 发布:ubuntu恢复删除的文件 编辑:程序博客网 时间:2024/05/01 21:32
 在嵌入式开发中,我们通常会碰到需要测试驱动程序完整性效果的地方。比如,一个LED工作在不同模式下会体现不同的特性,由于多种工作模式不容易模拟出来,这个时候我们要使用随机数程序来生成LED全部的工作路径,从而来测试LED驱动的完整性。

       在线程中建立随机数执行路径,有两种方式:

(1)WaitForSingleObject带无限时间

HANDLE Nled_Test_Event;        //线程事件申明
i初始化:
Nled_Test_Event = CreateEvent(NULL,TRUE,FALSE,NULL);   //创建初始值为FALSE的手工复位事件
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Nled_Test_Thread,0,0,NULL);   //创建线程
SetEvent(Nled_Test_Event);                         //置事件有效。除非手工清除,否则该事件就算捕获到后也仍然有效
线程函数:
DWORD WINAPI Nled_Test_Thread()
{
        DWORD dwWaitTime = IN FINITE;        //以无限时间等待
        int status;
        int kCount;

        srand(1);    //以1为基准值,产生随机数种子。种子只产生一次
        while(1)           //因为循环中的事件是手工复位的,所以只要不复位,该事件是一直有效的,线程会一直执行下去
        {
               status = WaitForSingleObject(Nled_Test_Event,dwWaitTime);  //等待线程事件
               if(status == WAIT_FAILED)
               {
                        RETAILMSG(1, (TEXT("Nled_Test_Thread:Create failed /r/n")));  
               }
               kCount = rand()%5;                       //随机数对5取模,分成5个执行路径
               switch(kCount)
               {
                      case 0:break;
                      case 1:break;
                      case 2:break;
                      case 3:break;
                      case 4:break;
                      default:break;
                }
                Sleep(20*1000);                         //每个路径有20S的时间来观察执行结果,并验证
         }
         return TRUE;
}
(2)WaitForSingleObject带有限时间

初始化:

Nled_Test_Event = CreateEvent(NULL,TRUE,FALSE,NULL);  //有限时间中,事件无论真假线程都会执行下去,所以忽略手工复位

CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Nled_Test_Thread,0,0,NULL);
线程函数:

DWORD WINAPI Nled_Test_Thread()
{
       int status;
       int kCount;

       srand(1);           //以1为基准值,产生随机数种子。种子只产生一次
       while(1)     //事件为真,每次马上执行;事件为假,20S后再执行,总之都会执行
       {
              status = WaitForSingleObject(Nled_Test_Event,20*1000);  //就算事件无效,线程也会每20S执行一次

              if(status == WAIT_FAILED)
              {
                     RETAILMSG(1, (TEXT("Nled_Test_Thread:Create failed /r/n")));
              }
              kCount = rand()%5;

              switch(kCount)
              {
                      case 0:break;
                      case 1:break;
                      case 2:break;
                      case 3:break;
                      case 4:break;
                      default:break;
               }

        }
        return TRUE;
}