使用函数指针和注册回调函数,写一个异步回调函数使用案例
时间: 2024-09-13 17:09:15 浏览: 43
在一些事件驱动的编程环境中,比如JavaScript的Node.js或C++的某些库(如Boost.Asio),你可以使用函数指针(function pointers)来注册回调函数。这里我们以一个简单的C++的例子来说明:
假设有一个函数,用于启动一项耗时的操作,比如文件I/O,并希望在操作完成后调用一个用户提供的函数通知结果。
```cpp
#include <functional>
#include <thread>
#include <chrono>
// 定义一个模板函数,接收一个函数指针作为参数
template<typename Func>
void start_async_operation(Func callback) {
std::thread worker_thread([callback]() {
// 模拟耗时操作,如文件读写
std::this_thread::sleep_for(std::chrono::seconds(5));
// 操作完成,调用回调函数
callback(); // 这里传递的是一个函数引用,相当于函数指针
});
// 等待线程完成
worker_thread.join();
}
// 用户自定义的回调函数类型
typedef void (*CallbackFunction)(bool success);
// 注册并启动异步操作
CallbackFunction my_callback = [](bool success) {
if (success) {
std::cout << "Operation completed successfully.\n";
} else {
std::cout << "An error occurred during the operation.\n";
}
};
int main() {
start_async_operation(my_callback); // 将my_callback作为参数传递给start_async_operation
return 0;
}
```
在这个例子中,`start_async_operation`是一个模板函数,它接受一个`Func`类型的参数(实际上是函数指针)。当模拟的耗时操作结束时,它会调用这个函数指针,也就是用户传递进来的回调函数`my_callback`。
阅读全文