std::thread开始线程方法
时间: 2023-10-14 12:30:36 浏览: 39
`std::thread` 是 C++11 标准库中的一个多线程库,用于创建新线程。
在创建新线程时,`std::thread` 构造函数需要接收一个可调用的对象(函数、函数指针、Lambda 表达式等)作为参数,该对象将在新线程中执行。例如,以下代码创建了一个新线程并在其中运行 `myFunction()` 函数:
```cpp
void myFunction() {
// 在这里编写线程执行的代码
}
int main() {
std::thread myThread(myFunction); // 创建线程并开始执行 myFunction()
// 在这里编写主线程的代码
myThread.join(); // 等待新线程执行完毕
return 0;
}
```
在创建了新线程后,主线程和新线程将同时执行。为了避免主线程在新线程执行完毕前退出,需要使用 `myThread.join()` 等待新线程执行完毕。
相关问题
std::thread lamuda 起线程
作为人工智能语言模型,我不支持任何编语言的语法和语义。但是可以告诉你std::thread和lambda表达式可以一起用来创建线程。例如:
```c++
#include <iostream>
#include <thread>
int main() {
std::thread t([](){
std::cout << "Hello from thread!" << std::endl;
});
t.join();
return 0;
}
```
这段代码创建了一个lambda表达式,作为新线程的入口函数。在lambda表达式中,我们打印了一条消息。然后,我们使用std::thread来创建新线程,并传入lambda表达式。最后,我们调用t.join()来等待新线程执行结束。
std::thread+设置线程优先级
可以使用std::thread::native_handle()函数获取线程的本地句柄,然后使用操作系统提供的函数设置线程的优先级。例如,在Windows操作系统中,可以使用SetThreadPriority()函数设置线程的优先级。下面是一个示例代码:
```c++
#include <iostream>
#include <thread>
#include <windows.h>
void thread_func()
{
std::cout << "Thread running" << std::endl;
}
int main()
{
std::thread t(thread_func);
HANDLE handle = t.native_handle();
SetThreadPriority(handle, THREAD_PRIORITY_HIGHEST);
t.join();
return 0;
}
```
在上面的代码中,我们创建了一个std::thread对象t,并将其关联到函数thread_func。然后,我们使用t.native_handle()函数获取线程的本地句柄,并使用SetThreadPriority()函数将线程的优先级设置为THREAD_PRIORITY_HIGHEST。最后,我们使用t.join()函数等待线程执行完毕。