/*++ 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 #include #include #include #include #include #include #include #include #include #ifndef _NO_TRACING_ #include 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; }