bool OrderAction() { CThostFtdcInputOrderActionField t={0}; strcpy(t.BrokerID, "1000"); strcpy(t.ExchangeID, "SSE"); strcpy(t.OrderSysID, ) ; void OnRtnOrder(CThostFtdcOrderField *pOrder) { printf("OnRtnOrder\n"); std::cout << "OrderSysID: " << pOrder->OrderSysID << std::endl; } 如何在OrderAction()中的t.OrderSysID指向OnRtnOrder()中的OrderSysID
时间: 2023-12-06 11:45:39 浏览: 137
需要在OrderAction()函数中保存OrderSysID,然后在OnRtnOrder()函数中获取并使用它。可以通过定义一个全局变量来实现:
```
std::string g_orderSysID; // 全局变量保存OrderSysID
bool OrderAction() {
CThostFtdcInputOrderActionField t={0};
strcpy(t.BrokerID, "1000");
strcpy(t.ExchangeID, "SSE");
strcpy(t.OrderSysID, g_orderSysID.c_str()); // 将全局变量中保存的OrderSysID赋值给t.OrderSysID
// ... 其他代码
}
void OnRtnOrder(CThostFtdcOrderField *pOrder) {
printf("OnRtnOrder\n");
std::cout << "OrderSysID: " << pOrder->OrderSysID << std::endl;
g_orderSysID = pOrder->OrderSysID; // 将获取到的OrderSysID保存到全局变量中
// ... 其他代码
}
```
这样,在OrderAction()函数中就可以使用OnRtnOrder()函数中获取到的OrderSysID了。
相关问题
bool Authentication() { CThostFtdcReqAuthenticateField t={0}; strcpy(t.BrokerID, "1000"); strcpy(t.UserID, "887103013746"); strcpy(t.UserProductInfo, "aaa"); strcpy(t.AppID, "client_abc_1.0.1"); strcpy(t.AuthCode, "VLDPKF3ALIU3JKJF"); void OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { printf("OnRspAuthenticate\n"); if(pRspInfo != NULL){ ofs<<"OnAuthenticationID:"<< pRspInfo->ErrorID<<std::endl; ofs<<"OnAuthenticationMsg:"<< pRspInfo->ErrorMsg<<std::endl; } } 怎么在这两个函数中使用sem_timedwait()函数?C++
sem_timedwait() 函数是用于等待信号量的函数,可以设置等待的超时时间。在上述代码中,可以通过以下步骤使用sem_timedwait() 函数:
1. 在 Authentication() 函数中创建一个信号量对象并初始化。
2. 在 OnRspAuthenticate() 函数中使用 sem_post() 函数释放该信号量对象。
3. 在 Authentication() 函数中使用 sem_timedwait() 函数等待信号量,同时设置超时时间。
下面是具体的代码示例:
```
#include <semaphore.h>
#include <time.h>
sem_t sem;
bool Authentication() {
CThostFtdcReqAuthenticateField t={0};
strcpy(t.BrokerID, "1000");
strcpy(t.UserID, "887103013746");
strcpy(t.UserProductInfo, "aaa");
strcpy(t.AppID, "client_abc_1.0.1");
strcpy(t.AuthCode, "VLDPKF3ALIU3JKJF");
// 初始化信号量
sem_init(&sem, 0, 0);
// 等待信号量
timespec timeout;
clock_gettime(CLOCK_REALTIME, &timeout);
timeout.tv_sec += 10; // 设置超时时间为10秒
if (sem_timedwait(&sem, &timeout) == -1) {
printf("sem_timedwait error\n");
return false;
}
// 信号量等待成功
return true;
}
void OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {
printf("OnRspAuthenticate\n");
if(pRspInfo != NULL) {
ofs<<"OnAuthenticationID:"<< pRspInfo->ErrorID<<std::endl;
ofs<<"OnAuthenticationMsg:"<< pRspInfo->ErrorMsg<<std::endl;
}
// 释放信号量
sem_post(&sem);
}
```
需要注意的是,sem_timedwait() 函数需要传入一个 timespec 结构体指针,用于设置超时时间,可以使用 clock_gettime() 函数获取当前时间,并设置超时时间,超时时间以秒为单位。在信号量等待成功后,需要使用 sem_post() 函数释放信号量对象。
阅读全文