# Thread (쓰레드) 의 진실
프로그래밍을 하다보면 쓰레드를 많이 사용하게 된다. 하지만 쓰레드는 굉장히 위험한 엔진?이므로
잘 돌려야 한다.
대부분 쓰레드를 생성할때 사용할 수 있는 함수들이
CreateThread 함수, _beginthread 함수, _beginthreadex 함수, AfxBeginThread 함수
이렇게 4가지 정도 사용되어지는데..
* CreateThread 함수
: 쓰레드 생성 함수 (사용자제요망)
C/C++ 표준함수를 호출하려하면 문제가 발생할 수 있음.
* _beginthread 함수
: C/C++ 표준함수가 안전하게 실행되어질 수 있다.
하지만 생성시 반환되는 핸들을 무효화시켜 커널 오브젝트에 접근할 수 있는 방법을
막아버리는 문제점이 있다.
* _beginthreadex 함수
: C/C++ 표준함수가 안전하게 실행되어질 수 있다. (사용권장)
마지막엔 CloseHandle 로 핸들을 닫아 주어야 한다.
_beginthread 함수를 개선시킨 함수이다.
* AfxBeginThread 함수
: MFC 에서 제공되어지는 클래스/함수 등을 사용할 때에는 특히 UI 관련된 작업을 할때에는
반드시 AfxBeginThread 함수로 쓰레드를 생성하여야 함. (사용권장)
내부적으로는 _beginthreadex 함수가 사용되어진다.
-------------------------------------------------------------------------------------------------
// _beginthreadex 예제
#include <process.h>
{
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, threadFunc, NULL, CREATE_SUSPENDED, NULL);
if (!hThread)
{
TRACE(" Error Thread \r\n");
return;
}
ResumeThread(hThread);
SuspendThread(hThread);
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
unsigned __stdcall threadFunc( void* pArguments )
{
...
return 0;
}
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
// AfxBeginThread 예제
#include <afxwin.h>
CWinThread *pThread = AfxBeginThread(funcThread, NULL);
static UINT funcThread(LPVOID pParam);
UINT CT_ThreadAfxDlg::funcThread(LPVOID pParam)
{
TRACE(" THREAD \r\n");
return 0;
}
-------------------------------------------------------------------------------------------------
'■ 프로그래밍, 개발' 카테고리의 다른 글
쓰레드 동기화기법 - CriticalSection/Mutex/Semaphore/Event (0) | 2014.02.18 |
---|---|
fopen_s,fread,fwrite,fclose 사용법 (0) | 2014.02.18 |
BSD(Berkeley Software Distribution) - 버클리 소프트웨어 배포 (0) | 2014.02.03 |
알고리즘을 재미있게.. (0) | 2014.02.02 |
Direct Show - VMR9 필터 활용법 (0) | 2014.01.31 |
댓글