关于回调和注册回调的困惑(C++)
Confusion about callback and registering a callback (C++)
我不熟悉在 C++ 中使用回调。我发现了一些与回调相关的术语,这让我很困惑。我想知道有关回调和在 C++ 中注册回调的详细信息。它们是一样的吗?他们有什么不同吗?何时以及如何使用每一个?如果有人能用简单的例子帮助我理解这些,我将不胜感激。
提前致谢。
就现实生活场景而言。我们有 Alice 想尽快从商店收到包裹,但不想在包裹准备好之前在商店里等待。但是 Alice 有一个朋友 Bob,他有很多时间可以在商店里等。所以爱丽丝和鲍勃一起来到商店,说,嘿,为我准备一个包裹,准备好后交给鲍勃。这个场景下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 packagae\n";
std::this_thread::sleep_for(200ms);
std::cout << "Package ready, Shop will execute callback\n";
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 else\n";
std::this_thread::sleep_for(100ms);
std::cout << "Alice still can do something else\n";
prepare_package.join();
}
int main()
{
Alice();
}
我不熟悉在 C++ 中使用回调。我发现了一些与回调相关的术语,这让我很困惑。我想知道有关回调和在 C++ 中注册回调的详细信息。它们是一样的吗?他们有什么不同吗?何时以及如何使用每一个?如果有人能用简单的例子帮助我理解这些,我将不胜感激。
提前致谢。
就现实生活场景而言。我们有 Alice 想尽快从商店收到包裹,但不想在包裹准备好之前在商店里等待。但是 Alice 有一个朋友 Bob,他有很多时间可以在商店里等。所以爱丽丝和鲍勃一起来到商店,说,嘿,为我准备一个包裹,准备好后交给鲍勃。这个场景下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 packagae\n";
std::this_thread::sleep_for(200ms);
std::cout << "Package ready, Shop will execute callback\n";
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 else\n";
std::this_thread::sleep_for(100ms);
std::cout << "Alice still can do something else\n";
prepare_package.join();
}
int main()
{
Alice();
}