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

C++三方服务异步拉起

Service.h

#pragma once
#include <string>class ServiceCallback {
public:virtual void onSuccess() = 0;virtual void onFailure() = 0;virtual ~ServiceCallback() = default;
};class Service {
public:Service();void start(ServiceCallback* callback); // 异步启动,回调通知成功/失败void sendMessage(const std::string& msg);void doSomethingElse();private:bool started;
};

Service.cpp

#include "Service.h"
#include <thread>
#include <iostream>
#include <chrono>Service::Service() : started(false) {}void Service::start(ServiceCallback* callback) {std::thread([this, callback]() {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟启动bool success = true; // 可以改成 false 模拟失败if (success) {started = true;std::cout << "Service started\n";if (callback) callback->onSuccess();} else {std::cout << "Service failed to start\n";if (callback) callback->onFailure();}}).detach();
}void Service::sendMessage(const std::string& msg) {if (!started) {std::cerr << "[Error] Service not started\n";return;}std::cout << "Send message: " << msg << std::endl;
}void Service::doSomethingElse() {if (!started) {std::cerr << "[Error] Service not started\n";return;}std::cout << "Do something else\n";
}

同步封装函数

#include "Service.h"
#include <future>
#include <iostream>
#include <exception>enum class StartResult { Success, Failure };StartResult startServiceAndWait(Service& svc) {std::promise<StartResult> p;std::future<StartResult> f = p.get_future();class MyCallback : public ServiceCallback {std::promise<StartResult>& promiseRef;public:MyCallback(std::promise<StartResult>& p) : promiseRef(p) {}void onSuccess() override { promiseRef.set_value(StartResult::Success); }void onFailure() override { promiseRef.set_value(StartResult::Failure); }};svc.start(new MyCallback(p));// 阻塞等待回调StartResult result = f.get(); // 成功或失败都会返回return result;
}

main.cpp

#include "Service.h"
#include <iostream>int main() {Service svc;StartResult res = startServiceAndWait(svc);if (res == StartResult::Success) {std::cout << "Service ready, call interfaces\n";svc.sendMessage("Hello");svc.doSomethingElse();} else {std::cerr << "Service failed to start, handle error\n";// 可以选择退出或者重试}return 0;
}
http://www.xdnf.cn/news/19414.html

相关文章:

  • MySQL函数 - String函数
  • Google Protobuf初体验
  • 深层语义在自然语言处理中的理论框架与技术融合研究
  • 使用电脑操作Android11手机,连接步骤
  • Python爬虫实战:研究统计学方法,构建电商平台数据分析系统
  • 面经分享--小米Java一面
  • 具有类人先验知识的 Affordance-觉察机器人灵巧抓取
  • STM32 之GP2Y1014AU0F的应用--基于RTOS的环境
  • 老题新解|不与最大数相同的数字之和
  • PCB 局部厚铜工艺:技术升级与新兴场景应用,猎板加工亮点
  • 同步/异步日志库
  • 响应式编程框架Reactor【4】
  • Web 聊天室消息加解密方案详解
  • open webui源码分析13-模型管理
  • 数据结构--栈(Stack) 队列(Queue)
  • Python API接口实战指南:从入门到精通
  • Linux查看有线网卡和无线网卡详解
  • 【Linux】基础I/O和文件系统
  • 初学者如何学习项目管理
  • 计算机毕设javayit商城 基于SSM框架的校园二手交易全流程管理系统设计与实现 Java+MySQL的校园二手商品交易与供需对接平台开发
  • 【嵌入式原理系列-第六篇】从Flash到RAM:MCU ld脚本全解析
  • TuringComplete游戏攻略(一、基础逻辑电路)
  • Python Facebook Logo
  • 神经网络正则化三重奏:Weight Decay, Dropout, 和LayerNorm
  • ARM 裸机开发 知识点
  • 豌豆压缩怎么用?3步避免网盘资源被和谐 网盘压缩包总被和谐?豌豆压缩实测解析 豌豆压缩避坑指南:敏感资源存储必读
  • 雷卯国产化之SE3401完全替代AOS的AO3401
  • 数字签名 digital signature
  • 年化225%,回撤9%,夏普4.32,3积分可查看参数
  • Java 常见异常系列:ClassNotFoundException 类找不到