同步、异步读取股票行情(源代码)
来源:互联网 发布:软件开发工程师怎么样 编辑:程序博客网 时间:2024/06/02 09:18
1、cpp文件#include"acsy/monitor/stock_data.h"#include<avhttp/avhttp.hpp>#include"acsy/util/publictools.h"#include<fstream>#include<json/json.h>#include<boost/asio/io_service.hpp>#include<vector>namespace acsy{namespace monitor{StockData::StockData() :m_mem(0){}StockData::~StockData(){}int StockData::main(){std::string aa = "aa";std::cout << aa << std::endl;return 0;}Json::Value StockData::deal_request(std::vector<std::string> vec_secucode, Json::Value &jv){boost::asio::io_service io;avhttp::http_stream h(io);boost::system::error_code ec;std::string link = "http://hq.sinajs.cn/list=";//"http://qt.gtimg.cn/q=sz000858"std::string temp;std::vector<std::string> vec_temp;for (int i = 0; i < vec_secucode.size(); i++){int stockNum = atoi(vec_secucode[i].c_str());if (vec_secucode[i].length() < 6){return jv;}else if (stockNum < 600000){temp = "sz" + vec_secucode[i] + ",";}else if (stockNum >= 600000){temp = "sh" + vec_secucode[i] + ",";}link += temp;}h.open(link, ec);if (ec){ // 打开失败处理...std::cout << "Error: " << ec.message() << std::endl;return jv;}char buf[512];std::stringstream ss;while (!ec){//h.async_read_some(boost::asio::buffer(buf), boost::bind(&m_dwload.handle_read, this, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error));std::size_t bytes_transferred = h.read_some(boost::asio::buffer(buf, 511), ec);buf[bytes_transferred] = '\0';//std::cout << buf << std::endl;ss << buf;}parse(ss);for (int i = 0; i < m_vec.size(); i++){jv[m_vec[i].code]["price"] = m_vec[i].priceNow;jv[m_vec[i].code]["priceYest"] = m_vec[i].priceYest;}h.close(ec); // 关闭.io.run();return jv;}void StockData::parse(std::stringstream &ss){CodePrice cp;std::string convertss;std::vector < std::string> vec_stinfo;while (std::getline(ss, convertss)){acsy::util::StringSpliter::splitAll(convertss, ',', &vec_stinfo);int temp = atoi(vec_stinfo[3].c_str());if (temp == 0){cp.priceNow = vec_stinfo[2];}else{cp.priceNow = vec_stinfo[3];}cp.code = vec_stinfo[0].substr(13, 6);cp.priceYest = vec_stinfo[2];m_vec.push_back(cp);vec_stinfo.clear();}}downloader::downloader(boost::asio::io_service &io, const std::string &url, Json::Value &jv) : m_io_service(io), m_stream(io){for (int i = 0; i < 1024; i++){m_buffer[i] = '\0';}m_stream.check_certificate(false);m_stream.async_open(url,boost::bind(&downloader::handle_open, this, boost::asio::placeholders::error,std::ref(jv)));}downloader::~downloader(){std::cout << "over" << std::endl;};void downloader::handle_open(const boost::system::error_code &ec, Json::Value &jv){if (!ec){boost::asio::async_read(m_stream, boost::asio::buffer(m_buffer, 1024),boost::bind(&downloader::handle_read, this,boost::asio::placeholders::bytes_transferred,boost::asio::placeholders::error,std::ref(jv)));}}void downloader::handle_read(int bytes_transferred, const boost::system::error_code &ec, Json::Value &jv){if (!ec){m_stream.async_read_some(boost::asio::buffer(m_buffer,1024),boost::bind(&downloader::handle_read, this, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error,std::ref(jv)));m_ss.write(m_buffer, bytes_transferred);}else{fanhui(jv);m_self.reset();}return;}void downloader::fanhui(Json::Value &jv){CodePrice cp;std::string convertss;std::vector < std::string> vec_stinfo;while (std::getline(m_ss, convertss)){if (convertss.size() < 100){return ;}acsy::util::StringSpliter::splitAll(convertss, ',', &vec_stinfo);int temp = atoi(vec_stinfo[3].c_str());if (temp == 0){cp.priceNow = vec_stinfo[2];}else{cp.priceNow = vec_stinfo[3];}cp.code = vec_stinfo[0].substr(13, 6);cp.priceYest = vec_stinfo[2];m_vecinfo.push_back(cp);vec_stinfo.clear();}for (int i = 0; i < m_vecinfo.size(); i++){jv[m_vecinfo[i].code]["price"] = m_vecinfo[i].priceNow;jv[m_vecinfo[i].code]["priceYest"] = m_vecinfo[i].priceYest;}//std::string ss=Json::StyledWriter().write(jv);return ;}}}/*CodePrice cp;std::string convertss;std::vector < std::string> vec_stinfo;while (std::getline(m_ss, convertss)){acsy::util::StringSpliter::splitAll(convertss, ',', &vec_stinfo);int temp = atoi(vec_stinfo[3].c_str());if (temp == 0){cp.priceNow = vec_stinfo[2];}else{cp.priceNow = vec_stinfo[3];}cp.code = vec_stinfo[0].substr(13, 6);cp.priceYest = vec_stinfo[2];m_vecinfo.push_back(cp);vec_stinfo.clear();}for (int i = 0; i < m_vecinfo.size(); i++){m_jv[m_vecinfo[i].code]["price"] = m_vecinfo[i].priceNow;m_jv[m_vecinfo[i].code]["priceYest"] = m_vecinfo[i].priceYest;}*/2、.h文件#ifndef ORDER_STOCK_DATA_H#define ORDER_STOCK_DATA_H#include"acsy/util/acsyapplication.h"#include<vector>#include<iostream>#include<json/json.h>#include<avhttp/avhttp.hpp>#include<avhttp/http_stream.hpp>#include<boost/enable_shared_from_this.hpp>/********************************************************************************************************/namespace acsy{/********************************************************************************************************/namespace monitor{/********************************************************************************************************/struct CodePrice{std::string code;std::string priceYest;std::string priceNow;};/********************************************************************************************************/class downloader :public boost::enable_shared_from_this<downloader>{public:downloader(boost::asio::io_service &io, const std::string &url,Json::Value &jv);~downloader();void handle_open(const boost::system::error_code &ec, Json::Value &jv);void handle_read(int bytes_transferred, const boost::system::error_code &ec, Json::Value &jv);void fanhui(Json::Value &jv);public:boost::asio::io_service &m_io_service;avhttp::http_stream m_stream;char m_buffer[1024];Json::Value m_jv;std::vector<CodePrice> m_vecinfo;std::stringstream m_ss;//std::string m_strbuf;std::shared_ptr<downloader> m_self;};/********************************************************************************************************/class StockData :public util::Application < StockData >{public:StockData();~StockData();int main();Json::Value deal_request(std::vector<std::string> vec_secucode, Json::Value &jv);void parse(std::stringstream &ss);std::string getappname(){ return "stockdata"; };public:int m_mem;downloader *m_dwload;Json::Value m_js;std::vector<CodePrice> m_vec;};/********************************************************************************************************/}/********************************************************************************************************/}/********************************************************************************************************/#endif3、调用代码的地方if (adt - last_stock_data_ > 5 *1* 1000){//StockData *sd = new StockData();//查询股票价格,同步.//sd->deal_request(vec_allStockCode, root_["codeNowPrice"]);//delete sd;//sd = nullptr;std::string link = "http://hq.sinajs.cn/list=";// qq请求数据地址 "http://qt.gtimg.cn/q=sz000858" //查询股票价格,异步.std::string temp;//拼接请求数据的网址.for (int i = 0; i < vec_allStockCode.size(); i++){int stockNum = atoi(vec_allStockCode[i].c_str());if (vec_allStockCode[i].length() < 6){return 0;}else if (stockNum < 600000){temp = "sz" + vec_allStockCode[i] + ",";}else if (stockNum >= 600000){temp = "sh" + vec_allStockCode[i] + ",";}link += temp;}{auto dwload = std::make_shared<downloader>(local().svc(), link, root_["codeNowPrice"]);dwload->m_self = dwload;}last_stock_data_ = adt;}
0 0
- 同步、异步读取股票行情(源代码)
- 腾讯股票行情获取源代码
- OPC同步读取和异步读取-------OPC(第七篇)
- OPC工作记录整理——第六篇(同步读取和异步读取)
- SerialPort同步和异步数据读取(二)
- SerialPort同步和异步数据读取
- SerialPort同步和异步数据读取(二)(
- 黑马程序员—同步/异步读取数据
- node 异步与同步读取文件
- nodejs异步读取文件与同步读取文件的区别
- SerialPort 同步和异步数据读取
- afn2.0同步和异步 及读取json格式
- 串口同步和异步的读取与串口设备编程
- 什么是同步、异步 (一)
- java 同步 异步 (1)
- 同步和异步(程序执行的同步和异步,传输的同步和异步)
- 异步 同步
- 同步异步
- LaTeX画图相关
- Android 实现Toast的快速切换刷新
- 微信支付之HTML5页面WAP端接入
- Android OkHttp文件上传与下载的进度监听扩展
- PB中实现菜单的动态生成(函数递归实现)
- 同步、异步读取股票行情(源代码)
- PB如何实现动态建立菜单
- JS 隔行换色,checkbox选中换色,checkbox全选
- 在Ti的DSP程序中使用C++编程
- 驱动程序开发的步骤
- 使用jQuery修改伪属性的样式,dorado中自定义弹出框的图标
- Android蓝牙开发介绍
- Windows驱动开发之准备篇
- 【算法分析】排序算法:希尔、归并、快速、堆排序