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

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.dtcms.com/a/358863.html

相关文章:

  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • K8s卷机制:数据持久化与共享
  • 当“循环经济”遇上“小程序”,旧物回收正迎来“智慧”升级
  • 奥普新汽车声学测试方案书
  • 谷歌 “Nano Banana“ 深度解析:AI 图像的未来是精准编辑,而非从零生成
  • 构建现代化的“历史上的今天“网站:从API到精美UI的全栈实践
  • jumpserver
  • 字数统计器和文本AI处理,非常好用
  • 【Leetcode】17、电话号码的字母组合
  • MYSQL速通(3/5)
  • Agno - 轻量级Python多智能体系统框架
  • Python可视化与交互-matplotlib库
  • 后台技术方案设计经验之谈
  • C读写xlsx库xlsxio的编译和测试
  • 第2.3节:AI大模型之Claude系列(Anthropic)
  • k8s 定时任务需求模板
  • 直流无刷电机2
  • 【计算机408计算机网络】第四章:自底向上五层模型之网络层
  • Linux IO复用
  • DeepConf:基于置信度提高LLM表现
  • Tomcat 企业级运维实战系列(五):Tomcat 优化和安全加固
  • Tiptrans转运 | 免费5国转运地址
  • Java中不太常见的语法-总结
  • static静态文件和requests请求对象
  • 内网穿透系列十二:一款基于 HTTP 传输和 SSH 加密保护的内网穿透工具 Chisel ,具备抗干扰、稳定、安全特性
  • PromptPerfect-将你的提示词提升到完美
  • 【Java基础知识 19】继承
  • BGP路由协议(三):路径属性
  • Cybero: 1靶场渗透
  • 2021-11-10 C++不变初心数