掘金社区

在实时行情模式下,退订行情与退出的问题Pinned highlighted

t***e@126.com 发表在掘金2 2016-03-20 08:20:49

掘金2
682
4
0

在实时行情模式下,退订行情与退出的问题
1、退订行情的问题
当在前面订阅了多个合约的行情时,之后只要退订一个合约行情,就会导致错误3009,数据服务连接断开。
_md.Subscribe("SHSE.600004.tick,SHSE.600005.tick");
......
.....
_md.Unsubscribe("SHSE.600004.tick");
为什么不可以是600004被退订了,而600005的行情正常接收呢???
2、退出的问题
_md.Rum()会阻塞当前线程,于是我在另一线程中运行_md.Run();
但使用_md.Close();后并不能使用那一个线程结束运行,而调用了_md.Unsubscribe();后再调用_md.Close();就可以了;
static void doRun()
{
_md.Run();
}
// 实时行情
int ret = _md.Init("tianzhong_live@126.com", "*********", MDMode.MD_MODE_LIVE);
if (ret != 0)
{
//登录失败
return;
}
_md.Subscribe("SHSE.600004.tick,SHSE.600005.tick");
_runThread= new Thread(new ThreadStart(Program.doRun));
if (_runThread.ThreadState == ThreadState.Unstarted)
{
_runThread.Start();
}
......
......
_md.Close();
_runThread.Abort();
Console.Write("finished");
而在_md.Close(); 插入退订的代码就可以了,如下
......
......
_md.Unsubscribe("SHSE.600004.tick");
_md.Close();
_runThread.Abort();
Console.Write("finished");
这是为什么呢?在关闭之前非得退订了才行吗?

评论: 4
  • 这两个问题,我已经是第二次提问了,技术人员难道没发现吗?

    2016-03-20 08:31:42
  • 抱歉回复晚了。第一个问题我们尝试在c# sdk重现一下,会尽快告诉结果。第二个退出问题,run是启动event loop, stop启动event loop,都需要在同一个线程处理。如果run在工作线程的话,其实你退出的时候可以不必调用close,主线程退出时进程会自动终止。close的调用不是必须的。

    2016-03-21 03:15:39
  • unsubscribe函数导致网络中断是是sdk实现的一个bug,下个版本修复。谢谢反馈

    2016-03-21 07:36:15
  • run与stop必须在同一个线程的话,那奇怪了,一旦调用了run不就阻塞了那个进程了吗,那stop放在那个线程里根本不能够调用啊,我想点击一个按钮运行run,开始监听,再点出另一个按钮运行stop,关闭监听,这如何实现?我以前试过是不行啊

    2016-03-22 13:31:16

Looks like your connection to 掘金量化社区 - 量化交易者的策略交流学习社区 was lost, please wait while we try to reconnect.