mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
2.8 KiB
154 lines
2.8 KiB
/*++
|
|
|
|
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;
|
|
}
|