基于线程的WINCE测试程序

    技术2022-05-20  48

          在嵌入式开发中,我们通常会碰到需要测试驱动程序完整性效果的地方。比如,一个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;}


    最新回复(0)