2016-10-20 3 views
0

이것은 스레드를 시작하는 데 사용하는 방법이며 작동하지만이 방법에는 단점이 있습니다.이것은 C++에서 스레드를 시작하는 올바른 방법입니까?

HANDLE A = (HANDLE)_beginthredex(0,0,&ThreadFunction,0,0,0); 

그리고 CloseHandle(A);와 스레드를 종료 :

void myFunc() 
{ 
    //code here 

} 


unsigned int _stdcall ThreadFunction(void* data) 
{ 
    myFunc(); 
    return 0; 
} 

나는 나의 주요 기능은 내가 사용합니다.

+6

'#include '. C++ STL의'thread' 라이브러리를 사용하십시오. – Charles

답변

8

당신이 C++ (11)에 대한 액세스 <thread> 라이브러리를 사용하고 크로스 플랫폼 호환성에 대해 걱정할 필요가 없습니다있는 경우 :

#include <thread> 

std::thread t(&ThreadFunction, nullptr); 

가 완료 스레드의 실행을 기다리는 join()을 사용합니다 :

t.join(); 

스레드가 실행되어야하는 기능이 반환 될 때까지 차단됩니다.

그렇지 않으면 CreateThread (Windows 사용자 인 것처럼 보임) 또는 beginthreadex을 사용하십시오.

POSIX의 경우 pthread_create()을 사용하십시오.

+0

@Angew 죄송합니다. 귀하의 편집 권한으로 수정되었습니다. –

+0

Windows에서 ['_beginthreadex'는 thread_local 변수를 지원하는 것처럼'CreateThread'보다 약간의 이점을 가질 수 있습니다 (http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c). . –

+0

@BoPersson 고맙습니다, 편집했습니다. –

관련 문제