[c \ \ C + +] 스 레 드 함수 비교

5329 단어 C++
다음으로 이동: http://www.chenhangyu.com/?p=175
스 레 드 를 만 드 는 함 수 는 Create Thread, 을 포함 하여 여러 가지 가 있 습 니 다.beginthread、 _beginthreadex 와 Afx BeginThread. 용법 은 MSDN 에 상세 하 게 설명 되 어 있 으 며, 여기에 필기 발췌 문 을 작성 합 니 다.
1. Create Thread 는 안전 하지 않 습 니 다. 많은 참고서 에서 Create Thread 로 스 레 드 를 만 들 지 말고 Close Handle 로 스 레 드 를 닫 으 라 고 합 니 다. 기술적 인 문제 로 인해 메모리 가 누 출 될 수 있 습 니 다. Create Thread API 로 만 든 스 레 드 에서 sprintf, malloc, strcat 등 CRT 저장 소 작업 과 관련 된 CRT 라 이브 러 리 함 수 를 직접 사용 하 는 것 은 안전 하지 않 습 니 다. 2.beginthread 와beginthreadex 는 Create Thread 에서 개선 되 었 습 니 다. 안전하게 조작 할 수 있 지만 스 레 드 가 끝 날 때 해당 하 는 호출endthread 또는endthreadex. 3, beginthreadex 비beginthread 가 더 안전 합 니 다. beginthread 는 Close Handle 을 암시 적 으로 호출 하여 스 레 드 핸들 을 닫 았 습 니 다. 그리고beginthreadex 쌍 을 이 루어 사용 하 는endthreadex 는 스 레 드 의 핸들 을 닫 지 않 았 습 니 다. CloseHandle 을 사용 하여 스 레 드 핸들 을 닫 는 것 을 표시 해 야 합 니 다. 논리 적 으로 더 안전 합 니 다. 4. MFC 프로그램 에 서 는 Afx BeginThread. 5 를 사용 하고 비 MFC 프로그램 에 서 는 가능 한 한 을 사용 합 니 다.beginthreadex.
사용beginthreadex 시작 스 레 드 와 매개 변 수 를 전달 하 는 예:
#include "windows.h"
#include
"stdio.h"
#include
"process.h"

typedef
struct
{
int seqno;
}PARA_T;
HANDLE hHendle;
DWORD threadProc(LPVOID pParameter);
//
void main(int argc, char* argv[])
{
int i;
// 5
for (i=0; i<5; ++i)
{
PARA_T aPara;
aPara.seqno
= i;
_beginthreadex(NULL,
0, (void *)&threadProc, (void *)&aPara, 0, hHendle);
Sleep(
500);
}
getchar();
}
DWORD threadProc(LPVOID pParameter)
{
iPara
= (PARA_T *)pParameter;
printf(
"-----%d
",iPara->seqno);
return 0;
}

  
결 과 는: - - 0 - - 1 - - 2 - - 3 - 4
주의해 야 할 부분: 1. 스 레 드 는 주 프로 세 스에 의존 하고 주 프로 세 스 가 종료 되 었 으 며 스 레 드 도 모두 종료 되 었 습 니 다. 따라서 예 는 getchar 가 기다 리 고 있 습 니 다. 마찬가지 로 상태 비트 + while 순환 을 사용 하여 스 레 드 가 처리 되 었 는 지 여 부 를 판단 할 수 있 습 니 다. 이 예 에서 Sleep (500) 를 사용 하면;getchar () 를 모두 제거 하고 실행 하면 이 뜻 을 알 수 있 습 니 다. 2. CloseThread 함 수 는 스 레 드 를 찰 칵 거 리 는 것 이 아니 라 스 레 드 핸들 을 찰 칵 거 리 는 것 입 니 다. 스 레 드 가 실행 되면 return 이 고 하나의 함수 가 실 행 된 것 처럼 종료 합 니 다. 여기 서 close 는 메 인 프로 세 스 가 스 레 드 에 대한 통 제 를 포기 했다 는 뜻 입 니 다. 3. 매개 변수 전달 에 대해 구조 체 방식 을 사용 하 는 것 이 좋 습 니 다.새로운 정의 나 new 구조 체 는 직접 변 수 를 매개 변수 로 사용 할 때 외부 조건 에 의 해 값 이 바 뀌 는 것 을 피 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기