SPRING :: NOTE

[C] runtime library Thread / 1부터 100까지 합 구하기 본문

Development Language/C · C++ · MFC

[C] runtime library Thread / 1부터 100까지 합 구하기

RAYZIE 2016. 6. 8. 18:16
반응형

#include 
#include 
#include 
#include 
 
typedef struct SumInfo
{
    int a, b, s;
}SUMINFO, *PSUMINFO;
 
unsigned _stdcall Sum(void* p);
 
void WriteString(const char* lpszFormat, ...)
{
    char str[1024] = { 0 };
    va_list argList;
    va_start(argList, lpszFormat);
    vprintf(lpszFormat, argList);   // 런타임 함수
    va_end(argList);
}
 
void main()
{
    char temp[1024];
    unsigned dwThreadId;
    printf("*** 예제 C Runtime Library를 이용한 스레드 ***\n");
   
    PSUMINFO psi = (PSUMINFO)malloc(sizeof(SUMINFO));
 
    psi->a = 1;
    psi->b = 100;
    psi->s = 0;
 
    unsigned h = _beginthreadex(
        NULL,   // 보안속성 SECURITY_ATTRIBUTES 구조체 포인터
        0,      // 스레드가 실행될 때 Commit 상태의 스택 크기 설정
        Sum,    // 스레드가 실행할 함수 포인터 (unsigned (_stdcall *pF))
        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_s(temp);
    free(psi);
    _endthreadex(0);
}
 
unsigned _stdcall Sum(void* p)
{
    PSUMINFO psi = (PSUMINFO)p;
    do
    {
        psi->s += psi->a;
        Sleep(20);
    } while (psi->a++ != psi->b);
    WriteString("\nSUM결과 %d\n", psi->s);
 
    return psi->s;
}


반응형
Comments