Windows API,__ declspec(thread)vs CreateThread?

时间:2013-01-10 23:59:13

标签: c++ c multithreading winapi

我一直在尝试通过Windows API了解线程。我从msdn遇到__declspec( thread ),但我不明白它与CreateThread()之间的区别。

听起来你只在对象上创建线程?这是否意味着如果我编写了一个方法while(1);并通过该对象在我的主类中运行该方法,那么它会在一个单独的线程中执行吗?我想我的问题是__declspec ( thread )用于什么,我应该使用CreateThread吗?

很抱歉,如果我的问题令人困惑。

1 个答案:

答案 0 :(得分:7)

它们之间的区别很大:

  • __declspec( thread )存储修饰符,指定声明的变量具有本地存储。这意味着每个线程拥有自己的此值副本。是globals的线程版本。

    C ++ 11 通过名称thread_local引入线程存储修饰符。它是存储修饰符,如static

  • CreateThread()是一个函数,它将创建一个新线程并开始运行您指定的某个函数。

    C ++ 11 还引入了一个完整的线程API,您可以使用它来编写可在(几乎)任何平台上运行的线程感知代码。您可以搜索std::threadstd::async ...

所以基本上它们是两个完全不同的东西,用于完全不同的目的。如果要使用 Windows API 创建新线程,请使用CreateThread。如果您希望变量使用 Windows API 拥有thread_local存储空间,请使用__declspec( thread )。如果您可以使用 C ++ 11 ,您应该忘记 Windows API 的细微之处,而是使用标准API