c++回调函数不触发举例

本文解释了回调函数在异步编程中的作用,如在长时间任务完成后执行特定操作。通过一个C++代码示例,展示了即使回调未触发,程序仍能执行其他任务,强调了异步编程的灵活性和效率。
摘要由CSDN通过智能技术生成

在编程中,回调函数通常用于异步操作或事件驱动的编程模式中,它们允许程序在某个操作完成或事件发生时执行特定的函数。如果回调函数没有被触发,程序可以继续执行其他任务,直到回调函数被触发或操作完成。

例如,在异步编程中,当一个长时间运行的任务被启动后,程序可以继续执行其他工作,而不需要等待这个长时间任务的完成。一旦长时间任务完成,如果设置了回调函数,它将被触发并执行相应的操作。如果由于某些原因回调函数没有被触发,程序的其他部分仍然可以正常运行。

以下是一个简单的例子,演示了即使回调函数没有触发,程序也可以执行其他任务:

#include <iostream>
#include <thread>
#include <chrono>

void longRunningTask(int taskId, std::function<void()> onTaskCompleted) {
    std::cout << "任务 " << taskId << " 开始执行..." << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(5)); // 模拟耗时操作
    std::cout << "任务 " << taskId << " 完成。" << std::endl;
    if (onTaskCompleted) {
        onTaskCompleted(); // 尝试触发回调函数
    }
}

void shortRunningTask() {
    std::cout << "执行一个短暂的任务..." << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟耗时操作
    std::cout << "短暂的任务完成。" << std::endl;
}

int main() {
    // 启动一个长时间运行的任务,这里不设置回调函数
    std::thread longRunningThread(longRunningTask, 1, nullptr);

    // 同时执行一个短暂的任务
    shortRunningTask();

    // 等待长时间运行的任务完成
    longRunningThread.join();

    return 0;
}

在这个例子中,我们有两个任务:longRunningTaskshortRunningTasklongRunningTask是一个长时间运行的任务,它接受一个回调函数作为参数。shortRunningTask是一个短暂的任务,它立即执行并很快完成。

main函数中,我们启动了longRunningTask任务,但没有为其设置回调函数(传递nullptr)。同时,我们执行了shortRunningTask任务。尽管longRunningTask的回调函数没有被触发,shortRunningTask任务仍然可以正常执行并完成。

这个例子展示了程序可以在等待一个可能不会触发回调的任务时,继续执行其他任务。这种模式在实际编程中非常有用,特别是在需要处理多个异步操作或事件时。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值