C++ 11 异步程序处理,并计算程序消耗时间秒

#include <iostream>
#include <string>
#include <chrono>
#include <thread>
#include <future>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/highgui/highgui_c.h>

using namespace cv;
using namespace std::chrono;

Mat getImg()
{
	Mat img = imread("z.png");
	return img;
}
 
std::string fetchDataFromDB(std::string recvData) {
  //确保函数要5秒才能执行完成
  std::this_thread::sleep_for(seconds(5));
 
  //处理创建数据库连接、获取数据等事情
  return "DB_" + recvData;
}
 
std::string fetchDataFromFile(std::string recvData) {
  //确保函数要5秒才能执行完成
  std::this_thread::sleep_for(seconds(5));
 
  //处理获取文件数据
  return "File_" + recvData;
}
 
int main() {
  //获取开始时间
  system_clock::time_point start = system_clock::now();
  
  //异步程序程序
  std::future<Mat> resultFromDB = std::async(std::launch::async, getImg);
  Mat async_img = resultFromDB.get();
  
  //从数据库获取数据
  std::string dbData = fetchDataFromDB("Data");
 
  //从文件获取数据
  std::string fileData = fetchDataFromFile("Data");
 
  //获取结束时间
  auto end = system_clock::now();
 
  auto diff = duration_cast<std::chrono::seconds>(end - start).count();
  std::cout << "Total Time taken= " << diff << "Seconds" << std::endl;
 
  //组装数据
  std::string data = dbData +  " :: " + fileData;
 
  //输出组装的数据
  std::cout << "Data = " << data << std::endl;
 
  return 0;
}

这里std::async 为异步处理程序,getImg为需要异步处理的函数名,如有参数,用“,”隔开。

std::future<Mat> resultFromDB = std::async(std::launch::async, getImg);

如:

函数为:

int pusher(Mat color_image, SwsContext *vsc, AVFrame *yuv, AVCodecContext *vc, 
AVFormatContext *ic, AVPacket pack, AVStream *vs)

调用示例:

std::future<int> push_img_to_pad = std::async(std::launch::async, pusher, color_image, vsc, yuv, vc, ic, pack, vs);
int async_img = push_img_to_pad.get();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值