用C++API订阅流数据时出现异常

发布于 2022-09-12 03:10:46 字数 2032 浏览 39 评论 0

我用DolphinDB Database的C++ api订阅流数据,代码如下:

#include <iostream>
#include <string>
#include <ctime>
#include <fstream>
#include <sstream>
#include "Streaming.h"
using namespace dolphindb;
std::ofstream ofs("msg.log");
std::ostringstream oss;
std::string GetNowStr()
{
    auto now = std::time(nullptr);
    auto tm = *std::localtime(&now);
    char time[9];
    sprintf(time, "%02d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
    return time;
}

void OnMsg(Message msg) 
{
    if(msg->getString(0) != "600000")
        return;
    auto size = msg->size();
    //std::cout << size << std::endl;
    oss.str("");
    oss << GetNowStr() << " OnMsg: ";
    for(int i=0; i<size; i++) {
        oss << msg->getString(i) << ", ";
    }
    std::cout << oss.str() << std::endl;

    static int count=0; static std::time_t stamp=std::time(nullptr);
    if(++count % 1000 == 0) {
       ofs << oss.str() << std::endl;
       auto now = std::time(nullptr);
       ofs << "count: " << count << ", time: " << now << ", interval: " << now - stamp << std::endl;
       stamp = now;
       ofs.flush();
    }
  
}

int main(int argc, char* argv[])
{    
    std::string host, table, action;
    int client_listen_port, pub_port;
    host = "192.168.1.130";
    table = "trades";     
    action = "test";
    client_listen_port = 9000;
    pub_port = 8848;
    
    ThreadedClient client(client_listen_port);
    client.subscribe(host, pub_port, OnMsg, table, action, 0);
    while (true) {
        char c = getchar();
        if (c == 'q') {
            break;
        }
    }
    return 0;
}

调试时,发生异常,提示0x00007FFBB83D2400 (libDolphinDBAPI.dll)处(位于 c++apitesting.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突。如下面2图所示:subex.pngsubex2.png
请问可能是什么原因?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名。 2022-09-19 03:10:46

client.subscribe返回值是一个智能指针ThreadSP,若不赋值给一个变量,会立即释放。

int main(int argc, char* argv[])
{    
    std::string host, table, action;
    int client_listen_port, pub_port;
    host = "192.168.1.130";
    table = "trades";     
    action = "test";
    client_listen_port = 9000;
    pub_port = 8848;
    
    ThreadedClient client(client_listen_port);
    auto t = client.subscribe(host, pub_port, OnMsg, table, action);
    while (true) {
        if (getchar() == 'q') {
            client.unsubscribe(host, pub_port, table, action);
            //t->join();
            break;
        }
    }
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文