본문 바로가기

BackEnd/C++

(Thread) 생성, 인자값 전달, 외부강제종료, (List) 값 저장 및 검색

#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* Data)

{

    Delete Del;

    Del = *(Delete*)(Data);

 

    while (true)

    {

        // 0.5초마다 글씨 출력

        //cout << "Name" << endl;    

        cout << Del.IP << endl;    

 

        Sleep(500);

    }

}

void ThreadTest2(void* pParam)

{

    Delete dele;

    dele = *(Delete*)pParam;

    while (true)

    {        

        // 0.5초마다 글씨 출력

        cout << dele.IP << "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, (void*)&t, 0, NULL);

    HANDLE hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadTest2, (void*)&t, 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));

            }

        }

    }

}

 

        // 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));

            }

        }

    }

}