当前位置: 首页 > article >正文

要在 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 秒(实际应用中可以执行其他任务)。
注意事项:
在多线程环境中,确保主线程不会在回调函数执行完成前就结束,否则可能导致程序异常退出或未定义行为。
在实际应用中,主线程可以在等待期间执行其他有用的任务,而不是简单地暂停。

这个示例展示了基本的多线程和回调函数使用方法,适用于需要延迟执行某个任务的场景。


http://www.kler.cn/a/461465.html

相关文章:

  • AfuseKt1.4.4 | 刮削视频播放器,支持阿里云盘和自动海报墙
  • Linux中隐藏操作身法
  • AI数据标注师理论部分考试题库 - 500题
  • Linux Shell 脚本编程基础知识篇—awk的条件判断(3)
  • UE5通过蓝图节点控制材质参数
  • 【深度学习】卷积网络代码实战ResNet
  • 使用Python实现量子密码学的探索
  • Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本
  • uniapp——微信小程序读取bin文件,解析文件的数据内容(三)
  • 118.杨辉三角120.三角形最小路径和
  • docker加速镜像和加速镜像配置
  • 基于FPGA的辩论赛系统设计-8名选手-正反两方-支持单选手评分-正反两方评分总和
  • 小程序分包优化实践:解决主包过大和vendor.js体积问题
  • C++ 设计模式:中介者模式(Mediator Pattern)
  • khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像
  • 计算机网络 (18)使用广播信道的数据链路层
  • Android中加载一张图片占用的内存
  • 2024年总结(2024年1月1日至2024年12月31日)
  • java中的文件操作
  • arthas查看拼接好参数的sql, redis, es完整可直接执行的命令
  • 30天开发操作系统 第 10 天 -- 叠加处理
  • 纯血鸿蒙ArkUI媒体查询详解
  • 【每日学点鸿蒙知识】无障碍、getLastLocation、蓝牙问题、卡片大小、关系型数据库等
  • LeetCode 热题 100_对称二叉树(39_101_简单_C++)(二叉树;递归;层次遍历(广度优先))
  • python中的元组类型
  • Unity中的Input.GetMouseButton,GetMouseButtonDown,GetMouseButtonUp