본문 바로가기

backup

C++ 멀티쓰레드 프로그래밍

C++ 멀티 쓰레드 프로그래밍 방법입니다. 아래와 같이 하면 쓰레드가 Background로 실행이 됩니다.

GUI프로그래밍이야 MFC를 써야 하겠지만, 가장 민감한 아랫부분을 조정하기 위해서 가능한 다른 부분은 native c++ 코딩을 하려고 하니 여러가지 에로사항이 꽃피우는 군요. ㅋ

 

C++은 대학때 하고 안하다가, 다시 하려니 부딪치는게 많네요. MFC 개발법 찾고, 쓰레드 처리하는 법 찾고, 소켓 만드는 법 찾고, 여러가지 예제 만들어보면서 확실히 C++이 제어할 수 있는게 더 많은 강력한 언어라는 건 알겠는데, 아직은 불편해요 ㅠ.ㅜ

 

C++ 기초적인 쓰레드 했으니, 이제 병렬 프로그래밍해야죠 ㅡㅡ;; 그 다양한 패턴들은 또 어떻게 구현을 하고 최적화할지.. ㅋㅋㅋㅋㅋㅋ

 

자세한 레퍼런스는

http://msdn.microsoft.com/en-us/library/ms684847(VS.85).aspx

 

 

------------------------------------------------------------------------------------------------------------

// ThreadTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <strsafe.h>

#define BUF_SIZE 255


void DisplayMessage (HANDLE hScreen, int Data, int Count)
{

    TCHAR msgBuf[BUF_SIZE];
    size_t cchStringSize;
    DWORD dwChars;

   
    StringCchPrintf(msgBuf, BUF_SIZE,
       TEXT("iteration %02d thread = %02d \n"), Count, Data);
    StringCchLength(msgBuf, BUF_SIZE, &cchStringSize);
    WriteConsole(hScreen, msgBuf, cchStringSize,
                 &dwChars, NULL);
    Sleep(1000);
}

 

DWORD WINAPI threadProcess( LPVOID lpParam ){
 
 int     Data = 0;
    int     count = 0;
    HANDLE  hStdout = NULL;
   
   
    if( (hStdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE ) 
    return 1;

    Data = *((int*)lpParam);

    for (count = 0; count <= 7; count++ )
    { 
  DisplayMessage (hStdout, Data, count);
    }
   
    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
 
 int iThread1 = 1;
    int iThread2 = 2;
 int iThread3 = 3;

    HANDLE thread1 = 0;   
    HANDLE thread2 = 0;
    HANDLE thread3 = 0;

 thread1 = CreateThread( NULL, 0,
           threadProcess, &iThread1, 0, NULL); 
    if ( thread1 == NULL)
        ExitProcess(iThread1);

 thread2 = CreateThread( NULL, 0,
           threadProcess, &iThread2, 0, NULL); 
    if ( thread2 == NULL)
        ExitProcess(iThread2);

 thread3 = CreateThread( NULL, 0,
           threadProcess, &iThread3, 0, NULL); 
    if ( thread3 == NULL)
        ExitProcess(iThread3);
   
 HANDLE arrThread[3];


 arrThread[0] = thread1;
    arrThread[1] = thread2;
    arrThread[2] = thread3;
   
 for(int i = 0;i < 10; i++){
  printf("%d\n", i);
  Sleep(500);
 }  

    WaitForMultipleObjects( 3,
        arrThread, TRUE, INFINITE);

    printf("all finished \n");
   
    CloseHandle(thread1);
    CloseHandle(thread2);
    CloseHandle(thread3);

 return 0;


}