温馨提示×

C++异步回调是如何实现的

c++
小樊
121
2024-07-16 19:25:46
栏目: 编程语言

在C++中,实现异步回调通常会使用多线程或者异步任务库来实现。以下是一种简单的实现方式:

  1. 使用std::asyncstd::futurestd::async函数可以在新的线程中异步执行一个函数,并返回一个std::future对象,用于获取函数执行的结果。可以在主线程中继续执行其他操作,然后通过std::future对象获取函数执行的结果。
#include <iostream>
#include <future>

void asyncFunction(std::promise<int>& prom) {
    // 模拟异步操作
    std::this_thread::sleep_for(std::chrono::seconds(2));
    int result = 42;
    prom.set_value(result);
}

int main() {
    std::promise<int> prom;
    std::future<int> fut = prom.get_future();

    std::async(std::launch::async, asyncFunction, std::ref(prom));

    // 继续执行其他操作
    std::cout << "Doing something else..." << std::endl;

    // 获取异步操作的结果
    int result = fut.get();
    std::cout << "Async function result: " << result << std::endl;

    return 0;
}
  1. 使用回调函数:可以定义一个回调函数,在异步操作完成后调用该回调函数,并传递结果。
#include <iostream>
#include <chrono>
#include <functional>

void asyncFunction(std::function<void(int)> callback) {
    // 模拟异步操作
    std::this_thread::sleep_for(std::chrono::seconds(2));
    int result = 42;
    callback(result);
}

void callbackFunction(int result) {
    std::cout << "Async function result: " << result << std::endl;
}

int main() {
    asyncFunction(callbackFunction);

    // 继续执行其他操作
    std::cout << "Doing something else..." << std::endl;

    return 0;
}

这些方法可以帮助实现异步回调,在C++中实现异步操作并在操作完成后执行回调函数。

0