본문 바로가기

BackEnd/C++

(Thread) 생성, 핸들, 외부종료 (List)값 대입, 값 찾아서 쓰레드 종료하기

#include "stdafx.h"

#include <Windows.h>

#include <iostream>

#include <list>

#include <algorithm>

 

using namespace std;

 

// 핸들 선언

typedef void *HANDLE;

DWORD ExitCode;

 

struct Delete

{

    char IP[16];

    HANDLE hThreadA;

    HANDLE hThreadB;

};

 

void ThreadTest(void* pParam)

{

    while (true)

    {

        // 0.5초마다 글씨 출력

        cout << "쓰레드 생성" << endl;    

        Sleep(500);

    }

}

void ThreadTest2(void* pParam)

{

    while (true)

    {

        // 0.5초마다 글씨 출력

        cout << "쓰레드2 생성" << endl;    

        Sleep(500);

    }

}

 

void _tmain(int argc, _TCHAR* argv[])

{

    list<Delete> IP_List;

    list<Delete>::iterator it;

    Delete t;

 

    // 쓰레드 생성

    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadTest, 0, 0, NULL);

    HANDLE hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadTest2, 0, 0, NULL);

    

    t.hThreadA = hThread;

    t.hThreadB = hThread2;

    strcpy_s(t.IP, 16, "192.168.11.1");

 

    IP_List.push_back(t);

    

    while (true)

    {

        // 2초후 쓰레드 제거

        Sleep(5000);

 

        for (it = IP_List.begin(); it != IP_List.end(); it++)

        {

            if (!strcmp((*it).IP, "192.168.11.1"))

            {

                TerminateThread((*it).hThreadA, GetExitCodeThread((*it).hThreadA, &ExitCode));

                TerminateThread((*it).hThreadB, GetExitCodeThread((*it).hThreadB, &ExitCode));

            }

        }

    }

}