void CTraderApi::RunInThread() { int iRet = 0; while (!m_reqList.empty()&&m_bRunning) { SRequest * pRequest = m_reqList.front(); int lRequest = ++m_lRequestID;// 这个地方是否会出现原子操作的问题呢? switch(pRequest->type) { case E_ReqAuthenticateField: iRet = m_pApi->ReqAuthenticate(&pRequest->ReqAuthenticateField,lRequest); break; case E_ReqUserLoginField: iRet = m_pApi->ReqUserLogin(&pRequest->ReqUserLoginField,lRequest); break; case E_SettlementInfoConfirmField: iRet = m_pApi->ReqSettlementInfoConfirm(&pRequest->SettlementInfoConfirmField,lRequest); break; case E_QryInstrumentField: iRet = m_pApi->ReqQryInstrument(&pRequest->QryInstrumentField,lRequest); break; case E_QryTradingAccountField: iRet = m_pApi->ReqQryTradingAccount(&pRequest->QryTradingAccountField,lRequest); break; case E_QryInvestorPositionField: iRet = m_pApi->ReqQryInvestorPosition(&pRequest->QryInvestorPositionField,lRequest); break; case E_QryInvestorPositionDetailField: iRet=m_pApi->ReqQryInvestorPositionDetail(&pRequest->QryInvestorPositionDetailField,lRequest); break; case E_QryInstrumentCommissionRateField: iRet = m_pApi->ReqQryInstrumentCommissionRate(&pRequest->QryInstrumentCommissionRateField,lRequest); break; case E_QryInstrumentMarginRateField: iRet = m_pApi->ReqQryInstrumentMarginRate(&pRequest->QryInstrumentMarginRateField,lRequest); break; case E_QryDepthMarketDataField: iRet = m_pApi->ReqQryDepthMarketData(&pRequest->QryDepthMarketDataField,lRequest); break; default: _ASSERT(FALSE); break; } if (0 == iRet) { //返回成功,填加到已发送池 m_nSleep = 1; AddRequestMapBuf(lRequest,pRequest); lock_guard<mutex> cl(m_csList); m_reqList.pop_front(); } else { //失败,按4的幂进行延时,但不超过1s m_nSleep *= 4; m_nSleep %= 1023; } Sleep(m_nSleep); } //清理线程 CloseHandle(m_hThread); m_hThread = NULL; m_bRunning = false; }
void CTraderApi::RunInThread() { int iRet = 0; while (!m_reqList.empty()&&m_bRunning) { SRequest * pRequest = m_reqList.front(); int lRequest = ++m_lRequestID;// 这个地方是否会出现原子操作的问题呢? switch(pRequest->type) { case E_ReqUserLoginField: iRet = m_pApi->ReqUserLogin(&pRequest->ReqUserLoginField,lRequest); break; case E_QryUserInvestorField: iRet = m_pApi->ReqQryUserInvestor(&pRequest->QryUserInvestorField, lRequest); break; case E_QryInstrumentField: iRet = m_pApi->ReqQryInstrument(&pRequest->QryInstrumentField,lRequest); break; case E_QryInvestorAccountField: iRet = m_pApi->ReqQryInvestorAccount(&pRequest->QryInvestorAccountField, lRequest); break; case E_QryInvestorPositionField: iRet = m_pApi->ReqQryInvestorPosition(&pRequest->QryInvestorPositionField,lRequest); break; case E_QryInvestorFeeField: iRet = m_pApi->ReqQryInvestorFee(&pRequest->QryInvestorFeeField, lRequest); break; case E_QryInvestorMarginField: iRet = m_pApi->ReqQryInvestorMargin(&pRequest->QryInvestorMarginField, lRequest); break; case E_QryOrderField: iRet = m_pApi->ReqQryOrder(&pRequest->QryOrderField, lRequest); break; case E_QryTradeField: iRet = m_pApi->ReqQryTrade(&pRequest->QryTradeField, lRequest); break; default: assert(false); break; } if (0 == iRet) { //返回成功,填加到已发送池 m_nSleep = 1; AddRequestMapBuf(lRequest,pRequest); lock_guard<mutex> cl(m_csList); m_reqList.pop_front(); } else { //失败,按4的幂进行延时,但不超过1s m_nSleep *= 4; m_nSleep %= 1023; } this_thread::sleep_for(chrono::milliseconds(m_nSleep)); } // 清理线程 m_hThread = nullptr; m_bRunning = false; }
void CTraderApi::RunInThread() { int iRet = 0; while (!m_reqList.empty()&&m_bRunning) { SRequest * pRequest = m_reqList.front(); long lRequest = InterlockedIncrement(&m_lRequestID); switch(pRequest->type) { case E_AbiInstrumentField: { DFITCAbiInstrumentField* body = (DFITCAbiInstrumentField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryArbitrageInstrument(body); } break; case E_CapitalField: { DFITCCapitalField* body = (DFITCCapitalField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryCustomerCapital(body); } break; case E_ExchangeInstrumentField: { DFITCExchangeInstrumentField* body = (DFITCExchangeInstrumentField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryExchangeInstrument(body); } break; case E_Init: lRequest = 0; iRet = ReqInit(); break; case E_InsertOrderField: _ASSERT(FALSE); break; case E_MatchField: { DFITCMatchField* body = (DFITCMatchField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryMatchInfo(body); } break; case E_OrderField: { DFITCOrderField* body = (DFITCOrderField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryOrderInfo(body); } break; case E_PositionField: { DFITCPositionField* body = (DFITCPositionField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryPosition(body); } break; case E_PositionDetailField: { DFITCPositionDetailField* body = (DFITCPositionDetailField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQryPositionDetail(body); } break; case E_SpecificInstrumentField: { DFITCSpecificInstrumentField* body = (DFITCSpecificInstrumentField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqQrySpecifyInstrument(body); } break; case E_UserLoginField: { DFITCUserLoginField* body = (DFITCUserLoginField*)pRequest->pBuf; body->lRequestID = lRequest; iRet = m_pApi->ReqUserLogin(body); } break; case E_QuoteSubscribeField: { DFITCQuoteSubscribeField * body = (DFITCQuoteSubscribeField*)pRequest->pBuf; //body->lRequestID = lRequest; iRet = m_pApi->ReqQuoteSubscribe(body); } break; default: _ASSERT(FALSE); break; } if (0 == iRet) { //返回成功,填加到已发送池 m_nSleep = 1; AddRequestMapBuf(lRequest,pRequest); CLock cl(&m_csList); m_reqList.pop_front(); } else { //失败,按4的幂进行延时,但不超过1s m_nSleep *= 4; m_nSleep %= 1023; } Sleep(m_nSleep); } //清理线程 CloseHandle(m_hThread); m_hThread = NULL; m_bRunning = false; }