我一直在尝试通过 Windows API 了解线程。__declspec( thread )
我从msdn遇到过,但我不明白那和CreateThread()
.
听起来您只在对象上创建线程?这是否意味着如果我编写了一个方法并while(1);
通过该对象在我的主类中运行该方法,它会在一个单独的线程中执行此操作?我想我的问题是__declspec ( thread )
用于什么,我应该使用它CreateThread
吗?
对不起,如果我的问题令人困惑。
我一直在尝试通过 Windows API 了解线程。__declspec( thread )
我从msdn遇到过,但我不明白那和CreateThread()
.
听起来您只在对象上创建线程?这是否意味着如果我编写了一个方法并while(1);
通过该对象在我的主类中运行该方法,它会在一个单独的线程中执行此操作?我想我的问题是__declspec ( thread )
用于什么,我应该使用它CreateThread
吗?
对不起,如果我的问题令人困惑。
它们之间的区别是巨大的:
__declspec( thread )
是一个存储修饰符,指定声明的变量具有本地存储。这意味着每个线程都拥有自己的这个值的副本。是全局变量的线程版本。
C++11通过名称引入了线程存储修饰符thread_local
。它是一个存储修饰符,例如static
.
CreateThread()
是一个函数,它将创建一个新线程并开始运行您指定的某些函数。
C++11还引入了一个完整的线程 API,您可以使用它来编写可在(几乎)任何平台上运行的线程感知代码。您可以搜索std::thread
并std::async
...
所以基本上它们是两个完全不同的东西,用于完全不同的目的。如果要使用Windows API创建新线程,请使用CreateThread
. 如果您希望变量使用Windows APIthread_local
进行存储,请使用. 如果您可以使用C++11,则应该忘记Windows API的微妙之处,而改用标准 API。__declspec( thread )