reactos/modules/rostests/tests/terminate/terminate.c

75 lines
1.1 KiB
C

#define UNICODE
#define WIN32_NO_STATUS
#include <windows.h>
#include <stdio.h>
#define NTOS_MODE_USER
#include <ndk/ntndk.h>
#define NDEBUG
#include <debug.h>
static volatile DWORD z;
static volatile DWORD x=0;
static NTSTATUS WINAPI
thread_1(PVOID Param)
{
DWORD y=0;
for(;;)
{
z++;
if(x>50)
{
Sleep(100);
x=0;y++;
if(y==3) return(0);
}
}
}
int
main(int argc, char *argv[])
{
HANDLE thread;
DWORD thread_id;
CONTEXT context;
DWORD z = 0;
context.ContextFlags=CONTEXT_CONTROL;
while (z < 50)
{
z++;
thread=CreateThread(NULL,
0x1000,
(LPTHREAD_START_ROUTINE)thread_1,
NULL,
0,
&thread_id);
if(!thread)
{
printf("Error: could not create thread ...\n");
ExitProcess(0);
}
Sleep(1000);
printf("T");
if ((z % 5) == 0)
{
TerminateThread(thread, 0);
}
printf("C");
GetThreadContext(thread, &context);
printf("S");
SuspendThread(thread);
printf("R");
ResumeThread(thread);
TerminateThread(thread, 0);
}
ExitProcess(0);
return(0);
}