UINT WINAPI ThreadFunction(LPVOID pParam)
{
std::cout << "ThreadFunction() - Begin" << std::endl;

if (pParam)
{
char cInput = 0;
int i, j, nIndex = 0;

THREAD_PARAM* pThreadParam = (THREAD_PARAM*)pParam;
bool* pbExitThread = pThreadParam->pbExitThread;
HANDLE hEvent1 = pThreadParam->hEvent1;
HANDLE hEvent2 = pThreadParam->hEvent2;
HANDLE hStartEvent = pThreadParam->hStartEvent;

char* pInput = pThreadParam->pInput;

SetEvent(hStartEvent);

while (1)

.......

}

 


int main()

{

    THREAD_PARAM ThreadParam;
    bool bExitThread = false;
    char cInput = 0;

    ThreadParam.pbExitThread = &bExitThread;
    ThreadParam.pInput = &cInput;

    HANDLE hEvent1 = CreateEvent(NULL, FALSE, FALSE, NULL);
    HANDLE hEvent2 = CreateEvent(NULL, FALSE, FALSE, NULL);
    HANDLE hEvent3 = CreateEvent(NULL, FALSE, FALSE, NULL);

    HANDLE hStartEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

    ThreadParam.hEvent1 = hEvent1;
    ThreadParam.hEvent2 = hEvent2;
    ThreadParam.hStartEvent = hStartEvent;

       std::cout << "main() - Begin" << std::endl;
     UINT nThreadId1 = 0;
     HANDLE hThread1 = (HANDLE)::_beginthreadex(
         NULL,
         0,
         ThreadFunction,
        (LPVOID)&ThreadParam,
        0,
        &nThreadId1);

  if (hThread1 == NULL)
  {
       std::cout << "main() - _beginthreadex() 1 failed" << std::endl;
       return 1;
  }

  WaitForSingleObject(hStartEvent, INFINITE); =>> 첫 쓰레드 실행시작할 때까지 대기 => 이 코드 없으면 두번째 쓰레드와 순서가 바뀌어 실행될 수 있음

  ThreadParam.hEvent1 = hEvent2;
  ThreadParam.hEvent2 = hEvent3;

  UINT nThreadId2 = 0;
  HANDLE hThread2 = (HANDLE)::_beginthreadex(
     NULL,
     0,
    ThreadFunction,
    (LPVOID)&ThreadParam,
    0,
    &nThreadId2);

  if (hThread2 == NULL)
  {
     std::cout << "main() - _beginthreadex() 2 failed" << std::endl;
     return 1;
  }

   WaitForSingleObject(hStartEvent, INFINITE);

........

}

 

* 같은 쓰레드 함수를 서로 다른 쓰레드가 호출 가능

* 복수개 쓰레드 실행 시킬 때 순차적으로 실행되길 원하면 이벤트를 이용해서 쓰레드 실행을 확인하면서 다음 쓰레드 생성하도록 처리

+ Recent posts