#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
HANDLE hThread;
HANDLE hThread2;
HANDLE hThread3;
DWORD WINAPI FirstThread(PVOID pvParam) {
int* value = (int*)pvParam;
while (1)
{
(*value)++;
printf("+++ x=%d\n", *value);
Sleep(200);
}
ExitThread(1);
return(0);
}
DWORD WINAPI SecondThread(PVOID pvParam) {
int* value = (int*)pvParam;
while (1)
{
(*value)--;
printf("--- x=%d\n", *value);
Sleep(1000);
}
ExitThread(1);
return(0);
}
DWORD WINAPI ThirdThread(PVOID pvParam) {
int* value = (int*)pvParam;
bool suspendAdd = false;
bool suspendLess = false;
while (1)
{
if (*value > 200 && suspendAdd == false)
{
printf("read x=%d,suspend add\n", *value);
SuspendThread(hThread);
suspendAdd = true;
if (suspendLess)
{
ResumeThread(hThread2);
suspendLess = false;
}
}
else if (*value < 180 && suspendLess == false)
{
printf("read x=%d, suspend less\n", *value);
SuspendThread(hThread2);
suspendLess = true;
if (suspendAdd)
{
ResumeThread(hThread);
suspendAdd = false;
}
}
Sleep(100);
}
ExitThread(1);
return(0);
}
int main() {
int x = 190;
DWORD dwThreadId;
hThread = CreateThread(NULL, 0, FirstThread, &x, 0, &dwThreadId);
DWORD dwThreadId2;
hThread2 = CreateThread(NULL, 0, SecondThread, &x, 0, &dwThreadId2);
DWORD dwThreadId3;
hThread3 = CreateThread(NULL, 0, ThirdThread, &x, 0, &dwThreadId3);
WaitForSingleObject(hThread, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
WaitForSingleObject(hThread3, INFINITE);
CloseHandle(hThread);
CloseHandle(hThread2);
CloseHandle(hThread3);
system("pause");
return 0;
}