【问题标题】:Windows API, __declspec( thread ) vs CreateThread?Windows API,__declspec(thread) vs CreateThread?
【发布时间】:2013-01-10 23:59:12
【问题描述】:

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

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

对不起,如果我的问题令人困惑。

【问题讨论】:

    标签: c++ c multithreading winapi


    【解决方案1】:

    它们之间的区别是巨大的:

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

      C++11 引入了名为thread_local 的线程存储修饰符。它是一个存储修饰符,例如static。

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

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

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

    【讨论】:

    • 我现在明白其中的区别了,谢谢!既然你在这里,我不知道这样问是否合适,但你有什么关于 Threads 的资料可以推荐我阅读吗?我知道 google 只需点击一下,但我不知道是否有书或网站可以真正帮助您至少了解 Threading 的基础知识。
    猜你喜欢
    • 2014-10-02
    • 2010-09-24
    • 2011-07-01
    • 1970-01-01
    • 2020-12-21
    • 2014-02-15
    • 2019-09-27
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多