new test
This commit is contained in:
@@ -37,6 +37,10 @@ epicsThreadTestHost_SRCS += epicsThreadTestMain.cpp epicsThreadTest.cpp
|
||||
PROD_HOST += epicsThreadTestHost
|
||||
OBJS_IOC_vxWorks += epicsThreadTest
|
||||
|
||||
epicsThreadPriorityTestHost_SRCS += epicsThreadPriorityTestMain.cpp epicsThreadPriorityTest.cpp
|
||||
PROD_HOST += epicsThreadPriorityTestHost
|
||||
OBJS_IOC_vxWorks += epicsThreadPriorityTest
|
||||
|
||||
epicsThreadPrivateTestHost_SRCS += epicsThreadPrivateTestMain.cpp epicsThreadPrivateTest.cpp
|
||||
PROD_HOST += epicsThreadPrivateTestHost
|
||||
OBJS_IOC_vxWorks += epicsThreadPrivateTest
|
||||
|
||||
106
src/libCom/test/epicsThreadPriorityTest.cpp
Normal file
106
src/libCom/test/epicsThreadPriorityTest.cpp
Normal file
@@ -0,0 +1,106 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
/* epicsdThreadPriorityTest.cpp */
|
||||
|
||||
/* Author: Marty Kraimer Date: 21NOV2005 */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "epicsThread.h"
|
||||
#include "epicsEvent.h"
|
||||
#include "epicsExit.h"
|
||||
|
||||
|
||||
typedef struct info {
|
||||
epicsEventId waitForMaster;
|
||||
epicsEventId waitForClient;
|
||||
}info;
|
||||
|
||||
extern "C" {
|
||||
|
||||
static void client(void *arg)
|
||||
{
|
||||
info *pinfo = (info *)arg;
|
||||
epicsThreadId idSelf = epicsThreadGetIdSelf();
|
||||
|
||||
while(1) {
|
||||
epicsEventWaitStatus status;
|
||||
printf("client calling epicsEventWait\n");
|
||||
status = epicsEventWait(pinfo->waitForMaster);
|
||||
if(status!=epicsEventWaitOK) {
|
||||
printf("task %p epicsEventWait returned %d\n", idSelf,(int)status);
|
||||
}
|
||||
epicsEventSignal(pinfo->waitForClient);
|
||||
printf("client after epicsEventSignal\n");
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void epicsThreadPriorityTest(void *)
|
||||
{
|
||||
unsigned int stackSize;
|
||||
info *pinfo;
|
||||
epicsThreadId clientId;
|
||||
epicsThreadId myId;
|
||||
epicsEventWaitStatus status;
|
||||
|
||||
myId = epicsThreadGetIdSelf();
|
||||
epicsThreadSetPriority(myId,50);
|
||||
pinfo = (info *)calloc(1,sizeof(info));
|
||||
pinfo->waitForMaster = epicsEventMustCreate(epicsEventEmpty);
|
||||
pinfo->waitForClient = epicsEventMustCreate(epicsEventEmpty);
|
||||
stackSize = epicsThreadGetStackSize(epicsThreadStackSmall);
|
||||
clientId = epicsThreadCreate("client",50,stackSize,client,pinfo);
|
||||
printf("master calling epicsEventSignal\n");
|
||||
epicsEventSignal(pinfo->waitForMaster);
|
||||
printf("master calling epicsEventWaitWithTimeout\n");
|
||||
status = epicsEventWaitWithTimeout(pinfo->waitForClient,.1);
|
||||
if(status!=epicsEventWaitOK) {
|
||||
printf("epicsEventWaitWithTimeout failed. Why????\n");
|
||||
goto done;
|
||||
}
|
||||
epicsThreadSetPriority(clientId,20);
|
||||
/* expect that client will not be able to run */
|
||||
printf("master calling epicsEventSignal\n");
|
||||
epicsEventSignal(pinfo->waitForMaster);
|
||||
printf("master calling epicsEventTryWait\n");
|
||||
status = epicsEventTryWait(pinfo->waitForClient);
|
||||
if(status!=epicsEventWaitTimeout) {
|
||||
printf("epicsEventTryWait did not return epicsEventWaitTimeout\n");
|
||||
} else {
|
||||
status = epicsEventWaitWithTimeout(pinfo->waitForClient,.1);
|
||||
if(status!=epicsEventWaitOK) {
|
||||
printf("epicsEventWaitWithTimeout failed. Why????\n");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
epicsThreadSetPriority(clientId,80);
|
||||
printf("master calling epicsEventSignal\n");
|
||||
/* expect that client will be able to run */
|
||||
epicsEventSignal(pinfo->waitForMaster);
|
||||
printf("master calling epicsEventTryWait\n");
|
||||
status = epicsEventTryWait(pinfo->waitForClient);
|
||||
if(status!=epicsEventWaitOK) {
|
||||
printf("epicsEventTryWait did not return epicsEventWaitOK %d\n",status);
|
||||
status = epicsEventWaitWithTimeout(pinfo->waitForClient,.1);
|
||||
if(status!=epicsEventWaitOK) {
|
||||
printf("epicsEventWaitWithTimeout failed. Why????\n");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
done:
|
||||
epicsExit(0);
|
||||
}
|
||||
}
|
||||
27
src/libCom/test/epicsThreadPriorityTestMain.cpp
Normal file
27
src/libCom/test/epicsThreadPriorityTestMain.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Author Marty Kraimer
|
||||
*/
|
||||
|
||||
#include "epicsThread.h"
|
||||
|
||||
extern "C" void epicsThreadPriorityTest(void *arg);
|
||||
|
||||
int main ( int argc , char *argv[] )
|
||||
{
|
||||
epicsThreadCreate("threadPriorityTest",epicsThreadPriorityMedium,
|
||||
epicsThreadGetStackSize(epicsThreadStackMedium),
|
||||
epicsThreadPriorityTest,0);
|
||||
epicsThreadExitMain();
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user