소프트웨어/Thread
스레드 프로그래밍 연습 - 2 : 스레드 종료
카켈
2007. 5. 2. 09:36
코드 출처
http://www.warpspeed.com.au/cgi-bin/inf2html.cmd?..\html\book\Toolkt40\XPG4REF.INF+101
바로 받기
코드 개요
스레드를 강제 종료하는 내용과 스레드 수행 대기를 담았습니다.
실행 화면
코드 설명
http://www.warpspeed.com.au/cgi-bin/inf2html.cmd?..\html\book\Toolkt40\XPG4REF.INF+101
바로 받기
코드 개요
스레드를 강제 종료하는 내용과 스레드 수행 대기를 담았습니다.
실행 화면
코드 설명
/* 스레드 프로그래밍 연습 - 2 : 스레드 강제 종료 thread_end.cpp 저작권 http://www.warpspeed.com.au/cgi-bin/inf2html.cmd?..\html\book\Toolkt40\XPG4REF.INF+101 - 출처 http:/cakel.tistory.com - 번역/수정 교육용을 목적으로 자유롭게 배포가 가능합니다. 스레드를 생성한 후 강제 종료하는 방법의 예를 기술한 문서입니다. */ #include <stdio.h> #include <process.h> #include <windows.h> /* + _endthread() - 최근에 수행을 시작한 스레드가 강제종료 됩니다. _beginthread() 와 같이 씁니다. (WIN32용) closethread() 와는 다른 방식으로 생성 되므로 closethread() 함수는 createthread() 와 맞춰 쓰시면 됩니다. (MFC용) 용도에 따라 다른 쓰레드 함수를 쓰시기 바랍니다. */ void hello(void *arg) { int i = 0; while (i++ < 5) { printf("안녕하세요!\n"); } _endthread(); // 여기 까지 실행하고 종료 됩니다. puts("hello 스레드가 여길 실행하지 못하고 종료 합니다."); return; } void nice(void *arg) { int i = 0; while (i++ < 5) { printf("반갑습니다!\n"); } // 스레드가 명시된 곳 까지 수행할수 있습니다. puts("nice 스레드가 여기까지 수행하고 종료 합니다."); return; } int main(void) { // 스레드의 수행 주소를 담은 핸들 HANDLE thread_1, thread_2; // 스레드 활성화(Activation) thread_1 = (HANDLE) _beginthread(hello, 0, NULL); thread_2 = (HANDLE) _beginthread(nice, 0, NULL); // 메인 스레드인 main() 함수가 먼저 return 0 로 도달하면 /* WaitForSingleObject(스레드 주소, 시간) 스레드가 다 실행 못하고 끝이 나므로 WaitForSingleObject 함수를 써서 해당 스레드가 끝날때 까지 기다려 줍니다. 시간이 INFINITE 는 예약어로써 무한대로 기다려준다는 뜻입니다. */ /* _beginthread 가 long 형으로 수행주소를 리턴 하지만 WaitForSingleObject 에서 받는 스레드 주소는 void* 로 받기 때문에 void* 형인 HANDLE 로 스레드 주소를 저장합니다. long* 주소를 void* 으로 형 변환합니다. void 포인터(void* ) 는 범용으로 주소를 형변환 하면 자유자재로 받을수 있습니다. 대신 내 보낼때 특정 형식에 맞춰서 보내지 않으면 얘기치 못한 오류가 생길수 있습니다. */ WaitForSingleObject(thread_1, INFINITE); WaitForSingleObject(thread_2, INFINITE); printf("생성된 스레드가 종료 되었습니다.\n"); return 0; }