std::async 中如何传入当前类的成员函数?比如在当前类的test()用std::async 异步执行 void test1(int x, int y)函数;
时间: 2024-09-13 12:14:17 浏览: 67
C++11中std::async的使用详解
要在`std::async`中传入当前类的成员函数,你需要传递一个成员函数指针或者使用lambda表达式。以下是两种方法的示例:
方法1:使用成员函数指针
```cpp
#include <iostream>
#include <future>
class MyClass {
public:
void test() {
// 异步执行成员函数test1
auto future = std::async(&MyClass::test1, this, 10, 20);
// 等待异步任务完成
future.wait();
}
void test1(int x, int y) {
std::cout << "x + y = " << x + y << std::endl;
}
};
int main() {
MyClass obj;
obj.test();
return 0;
}
```
方法2:使用lambda表达式
```cpp
#include <iostream>
#include <future>
class MyClass {
public:
void test() {
// 异步执行成员函数test1
auto future = std::async([this](int x, int y) { this->test1(x, y); }, 10, 20);
// 等待异步任务完成
future.wait();
}
void test1(int x, int y) {
std::cout << "x + y = " << x + y << std::endl;
}
};
int main() {
MyClass obj;
obj.test();
return 0;
}
```
在这两种方法中,我们都需要将`this`指针传递给成员函数指针或lambda表达式,以便正确地调用成员函数。同时,我们需要确保异步任务完成后再继续执行后续代码,可以通过调用`future.wait()`来实现。
阅读全文