windows-nt/Source/XPSP1/NT/base/win32/client/taskstrs.c
2020-09-26 16:20:57 +08:00

155 lines
2.8 KiB
C

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
taststrs.c
Abstract:
Tasking stress test.
Author:
Mark Lucovsky (markl) 26-Sep-1990
Revision History:
--*/
#include <assert.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
HANDLE Semaphore, Event;
VOID
TestThread(
LPVOID ThreadParameter
)
{
DWORD st;
(ReleaseSemaphore(Semaphore,1,NULL));
st = WaitForSingleObject(Event,500);
ExitThread(0);
}
VOID
NewProcess()
{
DWORD st;
DWORD ThreadId;
HANDLE Thread;
DWORD NumberOfThreads;
DWORD MaximumThreadCount;
DWORD i;
//
// Create an Event that is never signaled
//
Event = CreateEvent(NULL,TRUE,FALSE,NULL);
//
// Create a semaphore signaled by each thread as it starts
//
Semaphore = CreateSemaphore(NULL,0,256,NULL);
(Event);
(Semaphore);
MaximumThreadCount = 15;
NumberOfThreads = 0;
//
// Create the threads
//
printf("Creating %d threads... ",MaximumThreadCount);
for ( i = 0;i<MaximumThreadCount;i++ ) {
Thread = CreateThread(NULL,0L,(PVOID)TestThread,(LPVOID)99,0,&ThreadId);
if ( Thread ) {
NumberOfThreads++;
CloseHandle(Thread);
}
}
printf("%d threads Created\n",NumberOfThreads);
for(i=0;i<NumberOfThreads;i++) {
st = WaitForSingleObject((HANDLE)Semaphore,(DWORD)-1);
(st == 0);
}
Sleep(3000);
TerminateProcess(GetCurrentProcess(),0);
}
DWORD
_cdecl
main(
int argc,
char *argv[],
char *envp[]
)
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
BOOL Success;
DWORD st;
DWORD ProcessCount;
SMALL_RECT Window;
ProcessCount = 0;
if ( strchr(GetCommandLine(),'+') ) {
NewProcess();
}
GetStartupInfo(&StartupInfo);
Window.Left = 0;
Window.Top = 0;
Window.Right = 15;
Window.Bottom = 5;
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE),
TRUE,
&Window
);
while ( TRUE ) {
Success = CreateProcess(
NULL,
"taskstrs +",
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&StartupInfo,
&ProcessInfo
);
if (Success) {
ProcessCount++;
printf("Process %d Created\n",ProcessCount);
st = WaitForSingleObject((HANDLE)ProcessInfo.hProcess,(DWORD)-1);
(st == 0);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
}
}
return TRUE;
}