0

这是我的标题:

class my_router_client : public FIX8::my::mine_Router {

private:
    mine_session_client& _session;
    mutable std::vector<std::string> vSymbolList;

public:
    my_router_client(mine_session_client& session) : _session(session) {}

    virtual bool operator() (const FIX8::my::SecurityList *msg) const;
    void sendToServer(FIX8::Message *); 
    void logout();
    void itertool() const;
    };

我正在尝试将从安全列表响应中获得的数据保存到 vSymbolList 向量中。处理安全响应后,我试图通过 itertool 方法遍历向量。但每次我都得到一个空向量。我尝试在 securitylist 响应函数中打印向量的内容

virtual bool operator() (const FIX8::CX::SecurityList *msg) const;

我可以打印内容。它是线程内部的某种竞争条件吗?

这是安全列表响应处理程序

bool cx_router_client::operator() (const CX::SecurityList *msg) const
{
    GroupBase *dad(msg->find_group< CX::SecurityList::NoRelatedSym >());
    if (dad) {
        for (size_t cnt(0); cnt < dad->size(); ++cnt) {
            CX::Symbol symbol;
            MessageBase *details(dad->get_element(cnt));
            details->get(symbol);
            string ss; 
            ss = symbol();
            vSymbolList.push_back(ss);
//          cout << "at :: :: " << vSymbolList[cnt] << endl;

        }   
        cout << "no of symbol : " << vSymbolList.size() << endl;
        hypersleep<h_seconds>(1);
    }   

    return true;
}

这是 itertool 方法:

void my_router_client::itertool() const
{
    cout << "symbol list vector size inside itertool:: " << vSymbolList.size() << endl;

    stringstream ss; 
    ss << this_thread::get_id();
    uint64_t id = stoull(ss.str());
    cout << "Thread ID #### " << id << endl;

    vector<string>::iterator it = this->vSymbolList.begin();
    while (it != vSymbolList.end()) {
        cout << *it << endl;
        it++;
    }
}

这就是我在 main 中使用它们的方式:

int main()
{
  const string conf_file("myfix_client.xml");

  unique_ptr<ClientSessionBase> mc(new ClientSession<mine_session_client>(my::ctx(), conf_file, "DLD1"));

  mc->start(false, next_send, next_receive, mc->session_ptr()->get_login_parameters()._davi());

  hypersleep<h_seconds>(1);

  my_router_client *test = new my_router_client(static_cast< mine_session_client& > (*mc->session_ptr()));

  hypersleep<h_seconds>(1);

  test->sendToServer(makeSecurityListRequest());

  hypersleep<h_seconds>(1);

  test->itertool();
  while(1);
}
4

0 回答 0