2016-10-20 8 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'は、 '' CreateThread' '(http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c)よりもいくつかの利点があります。 。 –

+0

@BoPerssonありがとう、編集されました。 –

関連する問題