CreateThread

CreateThread는 호출 프로세스의 가상 주소 공간 내에서 실행할 스레드를 생성합니다.

HANDLE CreateThread(
  [in, optional]  LPSECURITY_ATTRIBUTES   lpThreadAttributes,
  [in]            SIZE_T                  dwStackSize,
  [in]            LPTHREAD_START_ROUTINE  lpStartAddress,
  [in, optional]  __drv_aliasesMem LPVOID lpParameter,
  [in]            DWORD                   dwCreationFlags,
  [out, optional] LPDWORD                 lpThreadId
);
인자
설명
보편적인 값

lpThreadAttributes

스레드의 보안 속성

NULL

dwStackSize

생성할 스레드의 스택 크기

0(PE 기본 스택 크기 사용)

lpStartAddress

실행할 함수의 이름/주소

lpParameter

함수에 전달할 매개변수

dwCreationFlags

생성 플래그

0 : 즉시 실행 CREATE_SUSPENDED : 일시 정지

lpThreadId

스레드 ID를 받을 포인터

변수 지정

Example

#include <iostream>
#include <windows.h>

struct ThreadArgs {
    int a;
    int b;
};

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
    ThreadArgs* args = static_cast<ThreadArgs*>(lpParam); // 인자를 C++ 타입으로 복원
    std::cout << "a=" << args->a << ", b=" << args->b << std::endl; // 출력

    delete args; // 할당했던 힙 데이터 반환
    return 0;
}

int main()
{
    ThreadArgs* args = new ThreadArgs{ 10, 20 }; // 새로운 스레드 변수 생성
    HANDLE h = CreateThread(NULL, 0, ThreadProc, args, 0, NULL); // 스레드 생성
    WaitForSingleObject(h, INFINITE); // 스레드 작업 결과 확인을 위해 대기
    CloseHandle(h); // 핸들 정리
    return 0;
}

References

Last updated