소프트웨어/Thread

스레드 프로그래밍 연습 - 1 : 스레드 생성

카켈 2007. 5. 2. 08:50
코드 참조
http://keegan.tistory.com/144

코드 받기


실행 화면

컴파일시 주의
프로젝트 설정(Alt + F7)에서 코드 생성 항목에서 Use run time libary 에 Debug Multithreaded 로 맞춰 주시면 됩니다.




코드 설명
/*
	- 스레드 프로그래밍 연습 - 1 : 스레드 생성
	
	- 저작권 알림
	http://keegan.tistory.com/144 - 원본
	http://cakel.tistory.com - 수정
        교육용을 목적으로 자유롭게 쓰실수 있습니다.

	- 코드 : thread.cpp
        스레드 구현하여 각각 다른 글자들을 출력하는 내용입니다. 
	WIN32 C++ 용입니다.


*/

// #include <헤더>	      // 필요한 함수
#include <windows.h>		// Sleep()
#include <stdio.h>		// printf(), fprintf()
#include <process.h>		// _beginthread();
#include <conio.h>		// _getch()

// 전역 변수
int repeatA;
int repeatB;

void PrintA(void *pData);	// 첫번째 스레드
void PrintB(void *pData);	// 두번째 스레드

int main()
{
	int ch;

	// fprintf()
	// 입출력 스트림으로 해당 내용을 출력합니다.
	// stdout 이 화면이므로, printf 함수와 크게 다르지 않게 작동합니다.
	fprintf(stdout,"a, b 를 입력하면 출력하지 않습니다. 다른키를 누르면 종료합니다.\n");
	fprintf(stdout,"시작!\n");
	
	// _beginthread(함수명, 스택크기, 단일인수)
	// 스택크기는 0으로 하면 운영체제에서 알아서 넣어 줍니다.
	// 보통 void* 으로 세번째 인수를 쓰는데, 복잡하게 쓸수도 있습니다.
	
	// 스레드는 변수를 공유하면서도 프로세스내에서 병렬적으로 같이 실행할수 있는
	// 부프로그램입니다.
	_beginthread(PrintA, 0, NULL);
	_beginthread(PrintB, 0, NULL);

	repeatA = 1;
	repeatB = 1;

	while(1)
	{		
		// 키보드 입력을 받는 메인 스레드에서 Ctrl + C 눌르거나
		// 다른키를 눌러서 return 으로 버리면 이미 생성된 스레드도 동반 종료 합니다.

		// _getch() : getchar() 함수와 달리 엔터를 치지 않아도
		// 한번의 키보드 입력으로 들어온 값을 바로 버퍼에 들어가서
		// 실행이 완료되는 함수 입니다. conio.h 헤더를 이용합니다.


		ch = _getch();
		if (ch == 'a')
			repeatA = 0;

		else if(ch == 'b')
			repeatB = 0;

		else
			break;


	}

	return 1;

}

void PrintA(void* pData)
{
	while(repeatA)
	{printf(" a ");
	Sleep(1000);}
	return;

}

void PrintB(void *pData)
{
	while(repeatB)
	{printf(" b ");
	Sleep(1000);}
	return;

}