关于回调和注册回调的混淆 (C++)
Confusion about callback and registering a callback (C++)
我是C++中使用回调的新手。我发现了一些与回调相关的术语,这让我感到困惑。我想知道有关回调和在C++中注册回调的详细信息。它们都一样吗?它们不同吗?何时以及如何使用每个?如果有人能通过简单的例子帮助我理解这些,我将不胜感激。
提前谢谢。
就现实生活场景而言。我们有爱丽丝,她希望尽快从商店收到包裹,但不想在商店中等待包裹准备好。但爱丽丝有一个朋友鲍勃,他有很多时间,可以在商店里等。所以爱丽丝带着鲍勃来到商店,说,嘿,为我准备一个包裹,准备好后再给鲍勃。在此方案中,Shop 是外部服务,Bob 是回调,Alice 说应将包提供给 Bob 正在注册回调,而 Shop 将包提供给 Bob 正在执行回调。
#include <thread>
#include <iostream>
using namespace std::literals;
void Bob(const char* what)
{
std::cout << "Bob received:" << what << "n";
}
void Shop(void(callback)(const char*))
{
std::cout << "Shop is very busy with preparing packagaen";
std::this_thread::sleep_for(200ms);
std::cout << "Package ready, Shop will execute callbackn";
callback("package");
}
void Alice()
{
std::cout << "Alice will register callback at Shop (and start Shop BTW)n";
std::thread prepare_package(Shop, Bob);
std::cout << "Alice can do something elsen";
std::this_thread::sleep_for(100ms);
std::cout << "Alice still can do something elsen";
prepare_package.join();
}
int main()
{
Alice();
}
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在C++中实现回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数