void CTraderApi::QueryInThread(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3) { int iRet = 0; switch (type) { case E_Init: iRet = _Init(); break; case E_ReqUserLoginField: iRet = _ReqUserLogin(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case E_AuthRandCodeField: iRet = _ReqFetchAuthRandCode(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; //case E_QryTradingAccountField: // iRet = _ReqQryTradingAccount(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; //case E_QryInvestorPositionField: // iRet = _ReqQryInvestorPosition(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; //case E_QryInstrumentField: // iRet = _ReqQryInstrument(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; //case E_QryInvestorField: // iRet = _ReqQryInvestor(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; //case E_QryOrderField: // iRet = _ReqQryOrder(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; //case E_QryTradeField: // iRet = _ReqQryTrade(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; default: break; } if (0 == iRet) { //返回成功,填加到已发送池 m_nSleep = 1; } else { m_msgQueue_Query->Input_Copy(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); //失败,按4的幂进行延时,但不超过1s m_nSleep *= 4; m_nSleep %= 1023; } this_thread::sleep_for(chrono::milliseconds(m_nSleep)); }
void CTraderApi::QueryInThread(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3) { int iRet = 0; switch (type) { case E_Init: iRet = _Init(); break; case E_Disconnect: _Disconnect(true); // 不再循环 return; case E_ReqUserLoginField: iRet = _ReqUserLogin(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case E_InputOrderField: iRet = _ReqOrderInsert(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case E_InputOrderActionField: iRet = _ReqOrderAction(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case E_QryDepthMarketDataField: iRet = _Subscribe(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; //case QueryType::ReqQryOrder : //case QueryType::ReqQryTrade: //case QueryType::ReqQryInvestor: //case QueryType::ReqQryTradingAccount: //case QueryType::ReqQryInvestorPosition: case E_ReqQueryData_STRUCT: iRet = _ReqQuery(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; default: break; } if (0 == iRet) { //返回成功,填加到已发送池 m_nSleep = 1; } else { m_msgQueue_Query->Input_Copy(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); //失败,按4的幂进行延时,但不超过1s m_nSleep *= 4; m_nSleep %= 1023; } // 将时定时查询功能放在查询队列中,这样退出就不会出问题了 // 由于队列中一直没有东西,所以不会再来触发这个循环,需要隔一定的时间向队列中放一个,最好放在最后 TestInThread(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); if (m_msgQueue_Query->Size() == 0) { m_msgQueue_Query->Input_Copy(E_Heartbeat, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); m_nSleep = 32; } this_thread::sleep_for(chrono::milliseconds(m_nSleep)); }
void CTraderApi::QueryInThread(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3) { int iRet = 0; switch (type) { case E_Init: iRet = _Init(); break; case E_Disconnect: _Disconnect(true); // 不再循环 return; } if (m_pApi) { switch (type) { case E_ReqUserLoginField: iRet = _ReqUserLogin(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case E_UserLogoutField: iRet = _ReqUserLogout(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case QueryType::QueryType_ReqQryTradingAccount: iRet = _ReqQryTradingAccount(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case QueryType::QueryType_ReqQryInvestorPosition: iRet = _ReqQryInvestorPosition(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; // case QueryType::QueryType_ReqQryInstrument: // iRet = _ReqQryInstrument(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; // case QueryType::QueryType_ReqQryInvestor: // iRet = _ReqQryInvestor(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); // break; case QueryType::QueryType_ReqQryOrder: iRet = _ReqQryOrder(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case QueryType::QueryType_ReqQryTrade: iRet = _ReqQryTrade(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; #ifdef HAS_Quote case QueryType::QueryType_ReqQryQuote: iRet = _ReqQryQuote(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; #endif // HAS_Quote #ifdef HAS_Settlement case E_SettlementInfoConfirmField: iRet = _ReqSettlementInfoConfirm(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; case QueryType::QueryType_ReqQrySettlementInfo: iRet = _ReqQrySettlementInfo(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); break; #endif // HAS_Settlement default: break; } } if (0 == iRet) { //返回成功,填加到已发送池 m_nSleep = 1; } else { m_msgQueue_Query->Input_Copy(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3); //失败,按4的幂进行延时,但不超过1s m_nSleep *= 4; m_nSleep %= 1023; } this_thread::sleep_for(chrono::milliseconds(m_nSleep)); }