测试linux下CTP的trader API时,每次退出程序时程序报错 double free or corruption 测试MD API没有问题,用的是相似的程序架构。 主要代码如下 Code: #include "main.h" using namespace std; void *TraderThread(void *arg) { cout<< "Trader thread start" <<endl; char TRADER_FRONT_ADDR1[] = "tcp://58.246.49.132:41205"; char TRADER_FRONT_ADDR2[] = "tcp://58.246.49.132:41205"; char TRADER_FRONT_ADDR3[] = "tcp://58.246.49.132:41205"; pTraderUserApi = CThostFtdcTraderApi::CreateFtdcTraderApi(); CTraderSpi* pUserSpi = new CTraderSpi(); pTraderUserApi->RegisterSpi((CThostFtdcTraderSpi*)pUserSpi); pTraderUserApi->SubscribePublicTopic(THOST_TERT_QUICK); pTraderUserApi->SubscribePrivateTopic(THOST_TERT_QUICK); pTraderUserApi->RegisterFront(TRADER_FRONT_ADDR1); pTraderUserApi->RegisterFront(TRADER_FRONT_ADDR2); pTraderUserApi->RegisterFront(TRADER_FRONT_ADDR3); pTraderUserApi->Init(); pTraderUserApi->Join(); } int main(void) { pthread_t TraderThraedId; int ret; ret = pthread_create(&TraderThraedId, NULL, TraderThread, NULL); if(ret!=0){ cout<< "creat trader thread failed\n" <<endl; return 0; } cin.get(); return 0; }
我用Linux,也曾经关注CTP,但对CTP基本还是一头雾水:比如在哪能接收到CTP数据?怎样能通过CTP在期货公司下单?好像不是很多公司支持CTP? 请问Skyline兄可否分享一下CTP的代码并介绍一下用法?
我猜原来本来是一个ThostUserApi一个库,然后上期硬是把人家拆分为两个库,在md屏蔽了很多功能,比如查询合约信息的功能,还有ApiStruct.h里面一些没有用到的struct。。但是md和td都有共用的变量(global pointers?),于是在两个都release的时候就出现了这种问题。
我在用,两个lib都用到了。 两个lib有共有的数据,但是for linux的lib好像没有用好tls,只是依赖pthread做管理,所以一个thread里release会影响到另一个thread。 不用release好像没什么问题,下单、收行情都ok。