Thread 출처 : http://wory.tistory.com/166
Event 동기화 출처 : http://blog.naver.com/drrich/20054322126
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
// HANDLE
HANDLE event = NULL;
// Thread_Func
DWORD WINAPI Thread_Func(PVOID vparam)
{
int* state = (int*)vparam;
int count = 0;
while ((*state)) {
// 신호 대기
WaitForSingleObject(event, INFINITE);
// 진행
printf("Thread_Func : %dn", count);
count++;
// 스레드 종료 신호
SetEvent(event);
Sleep(100);
}
(*state) = 2;
return 0;
}
// main
int main()
{
HANDLE thread = NULL;
int state = 1;
// 이벤트 생성
event = CreateEvent(NULL, 0, 0, NULL);
SetEvent(event);
// 스레드 생성
DWORD id;
thread = CreateThread(NULL, 0, &Thread_Func, &state, 0, &id);
// 메인 루프
while (1) {
// 신호 대기
WaitForSingleObject(event, INFINITE);
// 진행
printf("main...n");
// 종료
if (_kbhit() && getch()=='p') {
state=0;
}
if (state==2) break;
// 스레드 종료 신호
SetEvent(event);
Sleep(100);
}
// 스레드 강제 종료
if (state==1) TerminateThread(thread, 0);
// 이벤트 종료
SetEvent(event);
CloseHandle(event);
}
#include <stdio.h>
#include <conio.h>
// HANDLE
HANDLE event = NULL;
// Thread_Func
DWORD WINAPI Thread_Func(PVOID vparam)
{
int* state = (int*)vparam;
int count = 0;
while ((*state)) {
// 신호 대기
WaitForSingleObject(event, INFINITE);
// 진행
printf("Thread_Func : %dn", count);
count++;
// 스레드 종료 신호
SetEvent(event);
Sleep(100);
}
(*state) = 2;
return 0;
}
// main
int main()
{
HANDLE thread = NULL;
int state = 1;
// 이벤트 생성
event = CreateEvent(NULL, 0, 0, NULL);
SetEvent(event);
// 스레드 생성
DWORD id;
thread = CreateThread(NULL, 0, &Thread_Func, &state, 0, &id);
// 메인 루프
while (1) {
// 신호 대기
WaitForSingleObject(event, INFINITE);
// 진행
printf("main...n");
// 종료
if (_kbhit() && getch()=='p') {
state=0;
}
if (state==2) break;
// 스레드 종료 신호
SetEvent(event);
Sleep(100);
}
// 스레드 강제 종료
if (state==1) TerminateThread(thread, 0);
// 이벤트 종료
SetEvent(event);
CloseHandle(event);
}