要在 C++ 中实现一个函数,该函数接收一个函数指针 a 并在等待 3 秒后调用它
要在 C++ 中实现一个函数,该函数接收一个函数指针 a 并在等待 3 秒后调用它,可以使用多线程和回调函数来实现。C++11 及其后的标准库提供了便捷的多线程支持。
以下是一个示例代码,展示了如何实现这个功能:
#include <iostream>
#include <thread>
#include <chrono>
#include <functional>
// 定义回调函数类型
using CallbackFunction = std::function<void()>;
// 定义一个函数,用于等待3秒后调用回调函数
void waitForThreeSecondsAndCall(CallbackFunction a) {
// 使用std::this_thread::sleep_for来等待3秒
std::this_thread::sleep_for(std::chrono::seconds(3));
// 调用回调函数
a();
}
// 示例回调函数
void exampleFunction() {
std::cout << "Function `exampleFunction` is called after 3 seconds!" << std::endl;
}
int main() {
// 将exampleFunction作为回调传递给waitForThreeSecondsAndCall
waitForThreeSecondsAndCall(exampleFunction);
// 主线程可以继续做其他事情,这里只是简单地等待回调完成
std::cout << "Waiting for 3 seconds..." << std::endl;
// 如果主线程结束太快,可以加个暂停观察效果(仅用于演示)
// 实际应用中,主线程可以执行其他任务而不是简单的暂停
std::this_thread::sleep_for(std::chrono::seconds(4));
std::cout << "Main thread ends." << std::endl;
return 0;
}
解释:
CallbackFunction 类型定义:
使用 std::function<void()> 来定义一个可以存储任意无参数、无返回值的可调用对象的类型。
waitForThreeSecondsAndCall 函数:
接收一个 CallbackFunction 类型的参数 a。
使用 std::this_thread::sleep_for 函数等待 3 秒。
3 秒后,调用回调函数 a。
exampleFunction 函数:
一个简单的回调函数,输出一条消息表示被调用。
main 函数:
将 exampleFunction 作为回调传递给 waitForThreeSecondsAndCall 函数。
主线程可以继续执行其他任务,这里简单地输出一条等待消息。
为了观察到回调函数的调用效果,主线程暂停 4 秒(实际应用中可以执行其他任务)。
注意事项:
在多线程环境中,确保主线程不会在回调函数执行完成前就结束,否则可能导致程序异常退出或未定义行为。
在实际应用中,主线程可以在等待期间执行其他有用的任务,而不是简单地暂停。
这个示例展示了基本的多线程和回调函数使用方法,适用于需要延迟执行某个任务的场景。