1. ホーム
  2. c++

[解決済み] Windowsのスレッド処理。_beginthread vs _beginthreadex vs CreateThread C++.

2022-06-17 09:13:02

質問

スレッドを開始する良い方法は何ですか? _beginthread , _beginthreadx または CreateThread ?

の利点/欠点は何なのかを判断しようとしているのです。 _beginthread , _beginthreadexCreateThread . これらの関数はすべて新しく作成されたスレッドへのスレッドハンドルを返します。CreateThreadがエラーが発生したときにちょっとした追加情報を提供することはすでに知っています(それを確認するには GetLastError を呼び出すことで確認できます)...しかし、これらの関数を使用する際に考慮すべきことは何でしょうか?

私はWindowsアプリケーションで作業しているので、クロスプラットフォームの互換性はすでに問題外です。

msdn のドキュメントに目を通しましたが、たとえば、なぜ誰かが CreateThread の代わりに _beginthread を使うことにしたのか、またはその逆があるのか、どうしても理解できません。

ありがとうございました。

更新しました。 OK、すべての情報に感謝します、私はまた、いくつかの場所で私が呼び出すことができないことを読みました WaitForSingleObject() を呼び出すことはできないということです。 _beginthread() を使用した場合、しかし、もし私が _endthread() を呼び出すと、うまくいかないのでしょうか?そこでの取引は何ですか?

どのように解決するには?

CreateThread() は、カーネル レベルで制御の別のスレッドを作成するための生の Win32 API 呼び出しです。

_beginthread() & _beginthreadex() はCランタイムライブラリの呼び出しで CreateThread() を裏で呼び出すランタイムライブラリ呼び出しです。 一度 CreateThread() が返されました。 _beginthread/ex() は、新しいスレッドで C ランタイムライブラリを使えるようにするための追加の帳簿を作成します。

C++では、ほぼ間違いなく _beginthreadex() C ランタイムライブラリ (別名 MSVCRT*.dll/.lib) にリンクしない場合を除きます。