设为首页收藏本站

 找回密码
 注册
查看: 2859|回复: 9
打印 上一主题 下一主题

BUG:为什么取消交易指令后CPU占用仍然达到50%? [复制链接]

Rank: 2

精华
0
UID
39573
积分
57
帖子
16
主题
4
阅读权限
30
注册时间
2011-5-13
最后登录
2011-7-1
跳转到指定楼层
1#
发表于 2011-5-23 10:01:24 |只看该作者 |倒序浏览
本来TB在CPU中的占用只有2%-4%,我加了个交易指令后变成了50%,这也可以理解
但是我取消交易指令后,为什么还是50%呢?
TB还在运行什么呢?

非要我强行关闭程序,重新打开一次TB。

V4 beta里面还有这种问题吗?

Rank: 2

精华
0
UID
39573
积分
57
帖子
16
主题
4
阅读权限
30
注册时间
2011-5-13
最后登录
2011-7-1
2#
发表于 2011-5-23 13:03:14 |只看该作者
我发现了,这可能是invalidnumeric的问题
我的程序是
nCount = A_getorderCount();
for i=1 to nCount
{
....
}
我怀疑是因为有时候各种各样的原因导致nCount=invalidnumeric,也就是3.402823466e+38F
所以for循环会重复3.402823466e+38F遍,导致系统CPU大量占用,且无法退出
这就是一个签名

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
3#
发表于 2011-5-23 13:23:19 |只看该作者
回复 2# todd_xia


    循环前判断一下A函数是否是有效值

使用道具 举报

Rank: 2

精华
0
UID
39573
积分
57
帖子
16
主题
4
阅读权限
30
注册时间
2011-5-13
最后登录
2011-7-1
4#
发表于 2011-5-23 14:30:52 |只看该作者
我加了一条语句
             if (nCount<>InvalidNumeric)
             {
                  for i=1 to nCount

结果仍然出现无数循环的结果,后来看了看我自己的DebugFile,发现
nCount = 2147483647,不等于invalidnumeric = 3.402823466e+38F
因此仍然会出现不断地循环,不知道管理员有没有解释?

我现在设定成了nCount不得大于100,不然就不循环,才得以解决
这就是一个签名

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
5#
发表于 2011-5-23 16:45:50 |只看该作者
回复 4# todd_xia


    判断A函数是否是有效值,然后再赋值给nCount

使用道具 举报

Rank: 2

精华
0
UID
39573
积分
57
帖子
16
主题
4
阅读权限
30
注册时间
2011-5-13
最后登录
2011-7-1
6#
发表于 2011-5-24 07:15:38 |只看该作者
本帖最后由 todd_xia 于 2011-5-24 07:17 编辑

If (A_GetOrderCount()<>invalidnumeric)
{
      nCount = A_GetOrderCount();
      for i=1 to nCount
............

}

是说是这样的,是吧? 我就有个疑问,这个程序里面调用了两次A函数,如果第一次A函数给出的是正常值,比如50,第二次赋给nCount的时候是非正常值怎么办?那不还是错!

这个概率很小,但是我怀疑还是有可能出现类无限循环
这就是一个签名

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
7#
发表于 2011-5-24 08:55:00 |只看该作者
回复 6# todd_xia


    经过判断后,如果他为无效值,即很大的一个数,他就不会赋给nCount了

使用道具 举报

Rank: 2

精华
0
UID
39573
积分
57
帖子
16
主题
4
阅读权限
30
注册时间
2011-5-13
最后登录
2011-7-1
8#
发表于 2011-5-24 10:09:50 |只看该作者
your last post is not an understandable explanation
不好理解的解释

我的意思是,程序在读 If (A_GetOrderCount()<>invalidnumeric) 的时候
A_GetOrderCount 也许=50,这样就进入了下面的语句
但是到下面语句  nCount = A_GetOrderCount(); 的时候,程序又会联系券商,从券商那里
得到一个信号来判断现在账户里的委托单总数,但是可能由于通信问题或者杂七杂八的bug问题
回来的值就是个“乱七杂八值”,如我前面说的 2147483647。 那么以下的程序还是不对
这就是一个签名

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
9#
发表于 2011-5-24 10:19:57 |只看该作者
回复 8# todd_xia


    你前面所说的3.402823466e+38F或者2147483647都是无效值

使用道具 举报

Rank: 2

精华
0
UID
39573
积分
57
帖子
16
主题
4
阅读权限
30
注册时间
2011-5-13
最后登录
2011-7-1
10#
发表于 2011-5-24 21:22:44 |只看该作者
大赞管理员的理解能力!
是我见过的最有阅读理解力的管理员!
大赞!
这就是一个签名

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-24 07:32

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部