std::thread 使用lambda
时间: 2023-09-06 16:11:55 浏览: 73
可以使用lambda表达式创建一个新线程,示例如下:
```cpp
#include <thread>
#include <iostream>
int main() {
std::thread t([](){
std::cout << "Hello from thread!" << std::endl;
});
t.join();
return 0;
}
```
在上面的示例中,我们使用lambda表达式创建了一个新线程并输出一些文本。我们使用`join()`函数等待线程完成执行。注意,我们必须等待线程完成执行后才能结束程序。否则,线程可能会在主线程结束之前继续运行,导致未定义的行为。
相关问题
'std::thread::_State_impl<std::thread::_Invoker<std::tuple<ThreadPool::ThreadPool (int):: (lambda()#1}> > > warning: RTTI symbol not found for class
这个问题看起来是一个编译器的警告。RTTI(Run-Time Type Information)是一种C++的特性,它允许程序在运行时获取对象的类型信息。这个警告的意思是,在编译时无法找到某个类的RTTI符号,可能会导致程序在运行时出现问题。
通常情况下,这个警告可以通过在编译选项中添加-fno-rtti来忽略掉。不过,这样做会导致某些类型安全的代码无法正常工作,因此需要谨慎使用。另外,也可以通过在类定义中添加虚函数来解决这个问题,因为虚函数会自动添加RTTI符号。
如果你需要更具体的帮助,可以提供更多的上下文信息,我会尽力帮你解决问题。
std::thread lambda
这是一个使用 C++11 标准中的 std::thread 类创建线程并执行 lambda 表达式的示例:
```c++
#include <iostream>
#include <thread>
int main() {
int value = 0;
// 创建一个线程并执行 lambda 表达式
std::thread t([&value]() {
std::cout << "子线程开始执行" << std::endl;
value = 100;
std::cout << "子线程执行完毕" << std::endl;
});
// 等待子线程执行完毕
t.join();
std::cout << "value = " << value << std::endl;
return 0;
}
```
该示例中,创建了一个子线程并执行了一个 lambda 表达式,该表达式将 value 变量的值设置为 100。在主线程中调用 join() 方法等待子线程执行完毕后,输出 value 的值。
阅读全文