C++多线程异步回调函数
时间: 2023-09-15 19:16:43 浏览: 371
在 C++ 中,多线程异步回调函数可以通过使用 std::thread 和 std::async 实现。
std::thread 是 C++11 中引入的一个线程库,它可以创建一个新的线程来执行函数。例如,以下代码创建了一个新线程并执行了一个函数:
```
void myFunction() {
// 执行一些操作
}
int main() {
std::thread t(myFunction);
t.join(); // 等待线程执行完毕
return 0;
}
```
std::async 也是 C++11 中引入的另一个库,它可以异步地执行一个函数并返回一个 std::future 对象,该对象可以用于获取异步函数的返回值。例如,以下代码使用 std::async 异步地执行一个函数:
```
int myFunction() {
// 执行一些操作
return 42;
}
int main() {
std::future<int> result = std::async(std::launch::async, myFunction);
// 执行一些其他操作
int value = result.get(); // 等待异步函数执行完毕并获取返回值
return 0;
}
```
在多线程中使用异步回调函数时,可以将回调函数作为参数传递给异步函数,在异步函数完成后调用回调函数。例如,以下代码异步执行一个函数并在完成后调用回调函数:
```
void myCallback(int result) {
// 处理异步函数的结果
}
void myFunction(std::function<void(int)> callback) {
// 执行一些操作
int result = 42;
callback(result); // 调用回调函数
}
int main() {
std::function<void(int)> callback = myCallback;
std::async(std::launch::async, myFunction, callback);
// 执行一些其他操作
return 0;
}
```
在上面的代码中,myFunction 接受一个 std::function 对象作为回调函数,并在异步执行完毕后调用该函数。在 main 函数中,我们创建了一个 std::function 对象并将其传递给异步函数。在异步函数执行完毕后,myCallback 函数将被调用,并传递异步函数的结果作为参数。
阅读全文