Source code of Windows XP (NT5)
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.
|
|
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TOTAL_COUNT (100000000)
//
// DON'T UNCOMMENT THIS LINE UNTIL YOU'RE READY
// TO RUN THE WHOLE TEST. YOU WON'T BE ABLE TO
// BREAK IN UNTIL THE TEST ENDS!!!
//
#define GO_FOREVER (1)
#define MAX_MEMORY (256)
DWORD MyWorkerThread( PVOID ThreadParameter ) /*++
Pretend to be busy.
--*/ { ULONG i; PVOID TmpPtr = NULL; ULONG MemorySize;
#ifdef GO_FOREVER
while( 1 ) { #else
for( i = 0; i < TOTAL_COUNT; i++ ) { #endif
MemorySize = rand() % MAX_MEMORY; } return 0; }
int __cdecl main( int argc, char *argv[]) { ULONG i; DWORD ThreadId; SYSTEM_INFO SystemInfo; HANDLE MyHandle; HANDLE *HandlePtr = NULL;
printf( "This program is for testing purposes only.\n" ); printf( "It is designed to consume all available CPU cycles.\n" ); printf( "\n" ); printf( "IT WILL RENDER YOUR SYSTEM UNRESPONSIVE!\n" ); printf( "\n" ); printf( "Press the '+' key to continue, or any other key to exit.\n" ); if( _getch() != '+' ) { printf( "Exiting...\n" ); return; }
printf( "working..." );
//
// Figure out how many CPUs we have. We'll want to create a thread
// for each one so that there is no available resources.
//
GetSystemInfo( &SystemInfo );
//
// Allocate an array of handles for each one of the processors.
//
HandlePtr = (HANDLE *)malloc( sizeof(HANDLE) * SystemInfo.dwNumberOfProcessors ); if( HandlePtr == NULL ) { printf( "We failed to allocate any memory.\n" ); return; }
//
// Let this guy get lots of CPU time.
//
if (!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) { printf("Failed to raise to realtime priority\n"); }
//
// Now go create a bunch of threads so that we tie up all available time
// on all CPUs.
//
for( i = 0; i < SystemInfo.dwNumberOfProcessors; i++ ) { HandlePtr[i] = CreateThread( NULL, 0, MyWorkerThread, UIntToPtr( i ), CREATE_SUSPENDED, &ThreadId );
if( HandlePtr[i] != NULL ) { SetThreadPriority( HandlePtr[i], THREAD_PRIORITY_TIME_CRITICAL ); ResumeThread( HandlePtr[i] ); } }
//
// Now wait for them to finish.
//
WaitForMultipleObjects( SystemInfo.dwNumberOfProcessors, HandlePtr, TRUE, INFINITE );
}
|