C28617

警告 C28617: _beginthread() の戻り値を使用しないでください。 代わりに _beginthreadex() を使用してください

_beginthread よりも _beginthreadex を使用する方が安全です。 _beginthread によって生成されたスレッドがすぐに終了すると、_beginthread の呼び出し元に返されるハンドルが無効である場合があります。さらには、このハンドルが別のスレッドを指している可能性もあります。 一方、_beginthreadex から返されるハンドルは _beginthreadex の呼び出し元によって閉じられる必要があるため、_beginthreadex がエラーを返さなかった場合には確実にハンドルが有効です。

次のコード例では、この警告が生成されます。

hThread = (HANDLE)_beginthread (&SecondThreadFunc, 0, &args);
WaitForSingleObject (hThread, INFINITE);

次のコード例では、警告が生成されません。

hThread = (HANDLE)_beginthreadex ( NULL, 0,
                                   &SecondThreadFunc,
                                   &args, 0, &threadID);
WaitForSingleObject (hThread, INFINITE);
CloseHandle(hThread);