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);
........
}
* 같은 쓰레드 함수를 서로 다른 쓰레드가 호출 가능
* 복수개 쓰레드 실행 시킬 때 순차적으로 실행되길 원하면 이벤트를 이용해서 쓰레드 실행을 확인하면서 다음 쓰레드 생성하도록 처리
'프로그래밍 > Visual C++' 카테고리의 다른 글
visual c++ 6.0에서 디버깅시 브레이크포인터에서 진행이 안되고 Unhandled Exception에러 발생 해결방안 (0) | 2023.01.22 |
---|