@@ -19,12 +19,11 @@ using namespace std;
1919void * __stdcall Query (char type, void * pApi1, void * pApi2, double double1, double double2, void * ptr1, int size1, void * ptr2, int size2, void * ptr3, int size3)
2020{
2121 // 由内部调用,不用检查是否为空
22- CMdUserApi* pApi = (CMdUserApi*)pApi1 ;
22+ CMdUserApi* pApi = (CMdUserApi*)pApi2 ;
2323 pApi->QueryInThread (type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3);
2424 return nullptr ;
2525}
2626
27-
2827CMdUserApi::CMdUserApi (void )
2928{
3029 m_pApi = nullptr ;
@@ -35,7 +34,7 @@ CMdUserApi::CMdUserApi(void)
3534 m_msgQueue = new CMsgQueue ();
3635 m_msgQueue_Query = new CMsgQueue ();
3736
38- m_msgQueue_Query->Register ((void *)Query);
37+ m_msgQueue_Query->Register ((void *)Query, this );
3938 m_msgQueue_Query->StartThread ();
4039}
4140
@@ -74,13 +73,14 @@ void CMdUserApi::QueryInThread(char type, void* pApi1, void* pApi2, double doubl
7473 this_thread::sleep_for (chrono::milliseconds (m_nSleep));
7574}
7675
77- void CMdUserApi::Register (void * pCallback)
76+ void CMdUserApi::Register (void * pCallback, void * pClass )
7877{
78+ m_pClass = pClass;
7979 if (m_msgQueue == nullptr )
8080 return ;
8181
82- m_msgQueue_Query->Register ((void *)Query);
83- m_msgQueue->Register (pCallback);
82+ m_msgQueue_Query->Register ((void *)Query, this );
83+ m_msgQueue->Register (pCallback, this );
8484 if (pCallback)
8585 {
8686 m_msgQueue_Query->StartThread ();
@@ -108,7 +108,7 @@ bool CMdUserApi::IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo, int nRequestID
108108 pField->ErrorID = pRspInfo->ErrorID ;
109109 strcpy (pField->ErrorMsg , pRspInfo->ErrorMsg );
110110
111- m_msgQueue->Input_NoCopy (ResponeType::OnRtnError, m_msgQueue, this , bIsLast, 0 , pField, sizeof (ErrorField), nullptr , 0 , nullptr , 0 );
111+ m_msgQueue->Input_NoCopy (ResponeType::OnRtnError, m_msgQueue, m_pClass , bIsLast, 0 , pField, sizeof (ErrorField), nullptr , 0 , nullptr , 0 );
112112 }
113113 return bRet;
114114}
@@ -129,7 +129,7 @@ void CMdUserApi::Connect(const string& szPath,
129129 memcpy (&m_ServerInfo, pServerInfo, sizeof (ServerInfoField));
130130 memcpy (&m_UserInfo, pUserInfo, sizeof (UserInfoField));
131131
132- m_msgQueue_Query->Input_NoCopy (RequestType::E_Init, this , nullptr , 0 , 0 ,
132+ m_msgQueue_Query->Input_NoCopy (RequestType::E_Init, m_msgQueue_Query, this , 0 , 0 ,
133133 nullptr , 0 , nullptr , 0 , nullptr , 0 );
134134}
135135
@@ -143,7 +143,7 @@ int CMdUserApi::_Init()
143143 m_pApi = CThostFtdcMdApi::CreateFtdcMdApi (pszPath, m_ServerInfo.IsUsingUdp , m_ServerInfo.IsMulticast );
144144 delete[] pszPath;
145145
146- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Initialized, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
146+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Initialized, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
147147
148148 if (m_pApi)
149149 {
@@ -167,7 +167,7 @@ int CMdUserApi::_Init()
167167
168168 // 初始化连接
169169 m_pApi->Init ();
170- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Connecting, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
170+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Connecting, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
171171 }
172172
173173 return 0 ;
@@ -181,13 +181,13 @@ void CMdUserApi::ReqUserLogin()
181181 strncpy (pBody->UserID , m_UserInfo.UserID , sizeof (TThostFtdcInvestorIDType));
182182 strncpy (pBody->Password , m_UserInfo.Password , sizeof (TThostFtdcPasswordType));
183183
184- m_msgQueue_Query->Input_NoCopy (RequestType::E_ReqUserLoginField, this , nullptr , 0 , 0 ,
184+ m_msgQueue_Query->Input_NoCopy (RequestType::E_ReqUserLoginField, m_msgQueue_Query, this , 0 , 0 ,
185185 pBody, sizeof (CThostFtdcReqUserLoginField), nullptr , 0 , nullptr , 0 );
186186}
187187
188188int CMdUserApi::_ReqUserLogin (char type, void * pApi1, void * pApi2, double double1, double double2, void * ptr1, int size1, void * ptr2, int size2, void * ptr3, int size3)
189189{
190- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Logining, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
190+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Logining, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
191191 return m_pApi->ReqUserLogin ((CThostFtdcReqUserLoginField*)ptr1, ++m_lRequestID);
192192}
193193
@@ -197,7 +197,7 @@ void CMdUserApi::Disconnect()
197197 if (m_msgQueue_Query)
198198 {
199199 m_msgQueue_Query->StopThread ();
200- m_msgQueue_Query->Register (nullptr );
200+ m_msgQueue_Query->Register (nullptr , nullptr );
201201 m_msgQueue_Query->Clear ();
202202 delete m_msgQueue_Query;
203203 m_msgQueue_Query = nullptr ;
@@ -211,7 +211,7 @@ void CMdUserApi::Disconnect()
211211
212212 // 全清理,只留最后一个
213213 m_msgQueue->Clear ();
214- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Disconnected, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
214+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Disconnected, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
215215 // 主动触发
216216 m_msgQueue->Process ();
217217 }
@@ -220,7 +220,7 @@ void CMdUserApi::Disconnect()
220220 if (m_msgQueue)
221221 {
222222 m_msgQueue->StopThread ();
223- m_msgQueue->Register (nullptr );
223+ m_msgQueue->Register (nullptr , nullptr );
224224 m_msgQueue->Clear ();
225225 delete m_msgQueue;
226226 m_msgQueue = nullptr ;
@@ -378,7 +378,7 @@ void CMdUserApi::UnsubscribeQuote(const string& szInstrumentIDs, const string& s
378378
379379void CMdUserApi::OnFrontConnected ()
380380{
381- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Connected, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
381+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Connected, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
382382
383383 // 连接成功后自动请求登录
384384 ReqUserLogin ();
@@ -391,7 +391,7 @@ void CMdUserApi::OnFrontDisconnected(int nReason)
391391 pField->ErrorID = nReason;
392392 GetOnFrontDisconnectedMsg (nReason, pField->ErrorMsg );
393393
394- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Disconnected, 0 , pField, sizeof (RspUserLoginField), nullptr , 0 , nullptr , 0 );
394+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Disconnected, 0 , pField, sizeof (RspUserLoginField), nullptr , 0 , nullptr , 0 );
395395}
396396
397397void CMdUserApi::OnRspUserLogin (CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
@@ -406,8 +406,8 @@ void CMdUserApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CTho
406406
407407 sprintf (pField->SessionID , " %d:%d" , pRspUserLogin->FrontID , pRspUserLogin->SessionID );
408408
409- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Logined, 0 , pField, sizeof (RspUserLoginField), nullptr , 0 , nullptr , 0 );
410- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Done, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
409+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Logined, 0 , pField, sizeof (RspUserLoginField), nullptr , 0 , nullptr , 0 );
410+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Done, 0 , nullptr , 0 , nullptr , 0 , nullptr , 0 );
411411
412412 // 有可能断线了,本处是断线重连后重新订阅
413413 set<string> mapOld = m_setInstrumentIDs;// 记下上次订阅的合约
@@ -423,7 +423,7 @@ void CMdUserApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CTho
423423 pField->ErrorID = pRspInfo->ErrorID ;
424424 strncpy (pField->ErrorMsg , pRspInfo->ErrorMsg , sizeof (ErrorMsgType));
425425
426- m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, this , ConnectionStatus::Disconnected, 0 , pField, sizeof (RspUserLoginField), nullptr , 0 , nullptr , 0 );
426+ m_msgQueue->Input_NoCopy (ResponeType::OnConnectionStatus, m_msgQueue, m_pClass , ConnectionStatus::Disconnected, 0 , pField, sizeof (RspUserLoginField), nullptr , 0 , nullptr , 0 );
427427 }
428428}
429429
@@ -551,7 +551,7 @@ void CMdUserApi::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMark
551551 pField->AskVolume5 = pDepthMarketData->AskVolume5 ;
552552 } while (false );
553553
554- m_msgQueue->Input_NoCopy (ResponeType::OnRtnDepthMarketData, m_msgQueue, this , 0 , 0 , pField, sizeof (DepthMarketDataField), nullptr , 0 , nullptr , 0 );
554+ m_msgQueue->Input_NoCopy (ResponeType::OnRtnDepthMarketData, m_msgQueue, m_pClass , 0 , 0 , pField, sizeof (DepthMarketDataField), nullptr , 0 , nullptr , 0 );
555555 // }
556556}
557557
@@ -590,5 +590,5 @@ void CMdUserApi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp)
590590 sprintf (pField->Symbol , " %s.%s" , pField->InstrumentID , pField->ExchangeID );
591591 strcpy (pField->QuoteID , pForQuoteRsp->ForQuoteSysID );
592592
593- m_msgQueue->Input_NoCopy (ResponeType::OnRtnQuoteRequest, m_msgQueue, this , 0 , 0 , pField, sizeof (QuoteRequestField), nullptr , 0 , nullptr , 0 );
593+ m_msgQueue->Input_NoCopy (ResponeType::OnRtnQuoteRequest, m_msgQueue, m_pClass , 0 , 0 , pField, sizeof (QuoteRequestField), nullptr , 0 , nullptr , 0 );
594594}
0 commit comments