2

私はWindowsAPIを介してスレッドについて学ぼうとしています。msdnに出くわし__declspec( thread )ましたが、それとの違いがわかりません。CreateThread()

オブジェクトにスレッドを作成するだけのように聞こえますか?つまりwhile(1);、メインクラスでそのメソッドを実行するメソッドを作成し、そのオブジェクトを介して実行すると、別のスレッドで実行されるということですか?私の質問は何に__declspec ( thread )使われるのかということだと思いますが、それを使い直す必要がありCreateThreadますか?

私の質問が混乱している場合は申し訳ありません。

4

1 に答える 1

6

それらの違いは非常に大きいです:

  • __declspec( thread )宣言された変数にローカルストレージがあることを指定するストレージ修飾子です。これは、各スレッドがこの値の独自のコピーを所有していることを意味します。グローバルのスレッドバージョンです。

    C ++ 11では、名前でスレッドストレージ修飾子が導入されていますthread_local。そのストレージ修飾子は、のようにstatic

  • CreateThread()新しいスレッドを作成し、指定した関数の実行を開始する関数です。

    C ++ 11には、(ほぼ)すべてのプラットフォームで実行されるスレッド対応コードを作成するために使用できるスレッドAPI全体も導入されています。あなたは検索することができstd::threadますstd::async...

つまり、基本的には2つのまったく異なるものであり、まったく異なる目的で使用されます。Windows APIを使用して新しいスレッドを作成する場合は、を使用しますCreateThreadWindows APIthread_local使用して変数にストレージを持たせたい場合は、を使用します。C ++ 11を使用できる場合は、 Windows APIの微妙な点を忘れて、代わりに標準APIを使用する必要があります。__declspec( thread )

于 2013-01-11T00:03:25.197 に答える