Thread in C runtime library> example code. - Thread04
//------------------------------------------------------------------------------
// C Runtime Library를 이용한 스레드 예제 - 시작
//------------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
#define ONEK 1024
typedef struct _SumInfo
{
int a, b, s;
}SUMINFO, *PSUMINFO; // a 에서 b까지의 합을 s에 저장
unsigned __stdcall Sum(void* p);
void WriteString(const char* lpszFormat, ...) // 매개변수(...)의 처리 방법으로 매개변수 리스트 va_list를 사용
{
char str[ONEK] = {0};
va_list argList; // 매개변수 리스트
va_start(argList, lpszFormat); // 매개변수 리스트를 하나씩 꺼냄
vprintf(lpszFormat, argList); // 런타임 함수
va_end(argList); // 매개변수 리스트 사용 종료
}
void main()
{
char temp[ONEK];
unsigned dwThreadId;
printf("*** 예제 [Thread04] C Runtime library를 이용한 스레드 예제 *** \n");
// 기본 힙 메모리 오브젝트를 이용해서 메모리 할당
PSUMINFO psi = (PSUMINFO)malloc(sizeof(SUMINFO));
psi->a = 1;
psi->b = 100;
psi->s = 0;
// 스레드 생성
unsigned h = _beginthreadex(NULL, 0, Sum, psi, NULL, &dwThreadId);
// NULL, 보인속성 SECURYTI_ATTRIBUTES 구조체 포인터
// 0, 스레드가 실행도리 때 Commit상태의 스택 크기 설정
// Sum, 스레드 오브젝트가 실행할 함수 포인터
// psi, 스레드 함수에게 전달할 포인터. 일반적으로 데이터를 보냄
// NULL, 스레드 함수 실행 옵션
// &dwThreadId); 스레드 아이디를 리턴 받음
if(h==0) return;
// 스레드의 상태를 확인하여 종료될 때를 기다린다.
while (1)
{
DWORD dwWaitStatus = WaitForSingleObject((void *)h, 20);
if(dwWaitStatus == WAIT_OBJECT_0)
{
CloseHandle((void *)h);
break;
}
else if(dwWaitStatus == WAIT_TIMEOUT)
{
_putch('.');
}
else
{
break;
}
}
scanf(temp);
free(psi);
_endthreadex(0);
}
// 스레드 함수: psi->a부터 psi->b까지의 합을 psi->s에 대입한다.
unsigned __stdcall Sum(void* p)
{
PSUMINFO psi = (PSUMINFO)p;
do // psi->a부터 psi->b까지의 합을 psi->s에 대입한다.
{
psi->s += psi->a;
Sleep(20);
} while (psi->a++ != psi->b);
WriteString(TEXT("\nSum Result: %d\n"), psi->s);
return psi->s;
}
//------------------------------------------------------------------------------
// C Runtime Library를 이용한 스레드 예제 - 끝
//------------------------------------------------------------------------------
본 예제를 컴파일 할 때에는 Code Generation의
Use run-time library 를 Multi-thread 로 해야함
'◆ 무한한 가능성 > & Visual C/C++' 카테고리의 다른 글
Thread in C++> example code. - Thread05 (0) | 2009.08.20 |
---|---|
Thread - C 런타임 함수와 WIN32 API (0) | 2009.08.19 |
Thread in C runtime library (다중스레드, Multi-Thread) (0) | 2009.08.19 |
Thread example code. - Thread03 (0) | 2009.08.19 |
Thread (0) | 2009.08.19 |