关于ReqOrderAction

Discussion in 'CTP' started by skyline, Jul 13, 2011.

  1. 这一句是为了控制啥?没看出有什么作用
    static bool ORDER_ACTION_SENT = false; //是否发送了报单

    void CTraderSpi::ReqOrderAction(CThostFtdcOrderField *pOrder)
    {
    static bool ORDER_ACTION_SENT = false; //是否发送了报单
    if (ORDER_ACTION_SENT)
    return;

    CThostFtdcInputOrderActionField req;
    memset(&req, 0, sizeof(req));
    ///经纪公司代码
    strcpy(req.BrokerID, pOrder->BrokerID);
    ///投资者代码
    strcpy(req.InvestorID, pOrder->InvestorID);
    ///报单操作引用
    // TThostFtdcOrderActionRefType OrderActionRef;
    ///报单引用
    strcpy(req.OrderRef, pOrder->OrderRef);
    ///请求编号
    // TThostFtdcRequestIDType RequestID;
    ///前置编号
    req.FrontID = FRONT_ID;
    ///会话编号
    req.SessionID = SESSION_ID;
    ///交易所代码
    // TThostFtdcExchangeIDType ExchangeID;
    ///报单编号
    // TThostFtdcOrderSysIDType OrderSysID;
    ///操作标志
    req.ActionFlag = THOST_FTDC_AF_Delete;
    ///价格
    // TThostFtdcPriceType LimitPrice;
    ///数量变化
    // TThostFtdcVolumeType VolumeChange;
    ///用户代码
    // TThostFtdcUserIDType UserID;
    ///合约代码
    strcpy(req.InstrumentID, pOrder->InstrumentID);

    int iResult = pUserApi->ReqOrderAction(&req, ++iRequestID);
    cerr << "--->>> 报单操作请求: " << iResult << ((iResult == 0) ? ", 成功" : ", 失败") << endl;
    ORDER_ACTION_SENT = true;
    }
     
  2. 每次调用函数都初始化false,感觉起不到控制的作用

    static bool ORDER_ACTION_SENT = false;
     
  3. 它是C里面的静态变量,你没理解它的作用,去翻翻语法书吧。
     
  4. 没看到样例代码中有用到它的地方
     
  5. ORDER_ACTION_SENT = true;
    倒数第二行.呵呵
     
  6. 对这个方法/函数来说,这个静态变量好像控制不了什么东西,因为一调用就又把它设成false了,结果每次都发送报单。

    void CTraderSpi::ReqOrderAction(CThostFtdcOrderField *pOrder)
    {
    static bool ORDER_ACTION_SENT = false; //是否发送了报单
    if (ORDER_ACTION_SENT)
    return;

    ......
     
  7. static只在第一次初始化会赋值,以后再进函数时第一个定义会去掉,所以不会出现你说的每次都赋成false的情况。
     
  8. 那就没问题了,不过C++的这个语法还真是停误导人的,学习了,谢谢。
     
  9. 原来是这样,谢谢大家了