141 lines
2.5 KiB
C++
141 lines
2.5 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
sched-test.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module tests the IIS Scheduler code
|
||
|
|
||
|
|
||
|
Author:
|
||
|
|
||
|
George V. Reilly (GeorgeRe) May-1999
|
||
|
|
||
|
Project:
|
||
|
|
||
|
Internet Servers Common Server DLL
|
||
|
|
||
|
Revisions:
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#include <acache.hxx>
|
||
|
#include <issched.hxx>
|
||
|
#include <irtlmisc.h>
|
||
|
#include <dbgutil.h>
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stddef.h>
|
||
|
#include <string.h>
|
||
|
#include <ctype.h>
|
||
|
#include <time.h>
|
||
|
|
||
|
#ifndef _NO_TRACING_
|
||
|
#include <initguid.h>
|
||
|
DEFINE_GUID(SchedTestGuid,
|
||
|
0x7a09df80, 0x2dbf, 0x11d3, 0x88, 0x84, 0x00, 0x50, 0x04, 0x60, 0x50, 0x4c);
|
||
|
#else
|
||
|
DECLARE_DEBUG_VARIABLE();
|
||
|
#endif
|
||
|
|
||
|
DECLARE_DEBUG_PRINTS_OBJECT();
|
||
|
|
||
|
|
||
|
#define MAX_WORK_ITEMS 10
|
||
|
#define MAX_TESTS 5
|
||
|
|
||
|
class CCookie
|
||
|
{
|
||
|
public:
|
||
|
CCookie()
|
||
|
: m_dwCookie(0),
|
||
|
m_dwSleep(0)
|
||
|
{}
|
||
|
|
||
|
DWORD m_dwCookie;
|
||
|
DWORD m_dwSleep;
|
||
|
};
|
||
|
|
||
|
CCookie g_aCookies[MAX_TESTS][MAX_WORK_ITEMS];
|
||
|
|
||
|
VOID
|
||
|
Callback(
|
||
|
void* pvContext)
|
||
|
{
|
||
|
CCookie* pc = (CCookie*) pvContext;
|
||
|
DBG_ASSERT(pc != NULL && pc >= &g_aCookies[0][0]);
|
||
|
|
||
|
int nRow = (pc - &g_aCookies[0][0]) / MAX_WORK_ITEMS;
|
||
|
int nCol = (pc - &g_aCookies[0][0]) % MAX_WORK_ITEMS;
|
||
|
|
||
|
printf("\tCallback [%d][%d] starting, sleeping for %d ms\n",
|
||
|
nRow, nCol, pc->m_dwSleep);
|
||
|
|
||
|
Sleep(pc->m_dwSleep);
|
||
|
|
||
|
printf("\tCallback [%d][%d] finishing\n", nRow, nCol);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
TestScheduler(
|
||
|
int n,
|
||
|
bool fFlush)
|
||
|
{
|
||
|
printf("Initializing TestScheduler %d, %sflush\n",
|
||
|
n, fFlush ? "" : "no ");
|
||
|
|
||
|
// Initialize the Scheduler
|
||
|
InitializeIISRTL();
|
||
|
|
||
|
#ifdef _NO_TRACING_
|
||
|
SET_DEBUG_FLAGS(DEBUG_ERROR);
|
||
|
CREATE_DEBUG_PRINT_OBJECT("sched-test");
|
||
|
#else
|
||
|
CREATE_DEBUG_PRINT_OBJECT("sched-test", SchedTestGuid);
|
||
|
#endif
|
||
|
|
||
|
int i;
|
||
|
|
||
|
for (i = 0; i < MAX_WORK_ITEMS; i++)
|
||
|
{
|
||
|
g_aCookies[n][i].m_dwSleep = (i * 500 + 1);
|
||
|
g_aCookies[n][i].m_dwCookie =
|
||
|
ScheduleWorkItem(Callback, &g_aCookies[n][i], 100*i);
|
||
|
DBG_ASSERT(g_aCookies[n][i].m_dwCookie != 0);
|
||
|
printf("TestScheduler %d: ScheduleWorkItem(%d) = %u\n",
|
||
|
n, i, g_aCookies[n][i].m_dwCookie);
|
||
|
}
|
||
|
|
||
|
Sleep(2000);
|
||
|
|
||
|
if (fFlush)
|
||
|
{
|
||
|
for (i = MAX_WORK_ITEMS; --i >= 0; )
|
||
|
RemoveWorkItem(g_aCookies[n][i].m_dwCookie);
|
||
|
}
|
||
|
|
||
|
DELETE_DEBUG_PRINT_OBJECT();
|
||
|
|
||
|
TerminateIISRTL();
|
||
|
|
||
|
printf("Terminated TestScheduler %d\n", n);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
int __cdecl
|
||
|
main(
|
||
|
int argc,
|
||
|
char **argv)
|
||
|
{
|
||
|
for (int n = 0; n < MAX_TESTS; ++n)
|
||
|
TestScheduler(n, true);
|
||
|
|
||
|
return 0;
|
||
|
}
|