专业正规安全的配资公司炒股平台门户网
关键词不能为空

股票配资

导航

「国内配资平」配资平 台年化利息多少?

未知
admin

方维配资 微信 源码:微信libco协程库源码分析

微信libco协程库源码分析

libco是微信后台开发和使用的协程库,同时应该也是极少数的将C/C++协程直接运用到如此大规模的生成环境中的案例了。

在《云风coroutine协程库源码分析》中,介绍了有栈协程的实现原理。相比coroutine,libco在性能上号称可以调度千万级协程。 从使用上来说,不仅提供了一套类pthread的协程通信机制,同时可以零改造地将三方库的阻塞IO调用协程异步化。

本文将从源码角度着重分析libco的高效之道。

在正式阅读本文之前,如果对有栈协程的实现原理不是特别了解,建议提前阅读《云风coroutine协程库源码分析》。

同时,我也提供了libco注释版,辅助大家理解libco的代码。

libco和coroutine的基本差异

相比于coroutine协程库, libco整体更成熟,性能更高,使用上也更加方便。主要体现在以下几个方面:

1. 协程上下文切换性能更好

2. 协程在IO阻塞时可自动切换,包括gethostname、mysqlclient等。

3. 协程可以嵌套创建,即一个协程内部可以再创建一个协程。

4. 提供了超时管理,以及一套类pthread的接口,用于协程间通信。

关于libco的如何实现有栈协程的切换,co_resume、co_yield是如何实现的。此部分内容已在《云风coroutine协程库源码分析》中进行了详细的剖析。各个协程库这里的实现大同小异,本文就不再重复讲述此部分内容了。

不过,libco在协程的栈空间上有不一样的地方:

1. 共享栈是可选的,如果想要使用共享栈模式,则需要用户自行创建栈空间,在co_create时传递给libco。(参数stCoRoutineAttr_t* attr)

2. 支持协程使用独立的栈空间,不使用共享栈模式。(默认每个协程有128k的栈空间)

3. libco默认是独立的栈空间,不使用共享栈。

除此之外,libco不使用ucontext进行用户态上下文的切换,而是自行写了一套汇编来进行上下文切换。

另外,libco利用co_create创建的协程, 需要自行调用co_release进行释放。这里和coroutine不太一样。

协程上下文切换性能更好

我们之前提到,云风的coroutine库使用ucontext来实现用户态的上下文切换,这也是实现协程的关键。

libco基于性能优化的考虑,没有使用ucontext,而是自行编写了一套汇编来处理上下文的切换, 具体代码在coctx_swap.S。

libco的上下文切换大体只保存和交换了两类东西:

1. 寄存器:函数参数类寄存器、函数返回值、数据存储类寄存器等。

2. 栈:rsp栈顶指针

相比于ucontext,缺少了浮点数上下文和sigmask(信号屏蔽掩码)。具体可对比glibc的相关源码。

  • 取消sigmask是因为sigmask会引发一次syscall,在性能上会所损耗。
  • 取消浮点数上下文,主要是在服务端编程几乎用不到浮点数计算。

此外,libco的上下文切换只支持x86,不支持其他架构的cpu,这是因为在服务端也几乎都是x86架构的,不用太考虑CPU的通用性。

据知乎网友的实验证明:libco的上下文切换效率大致是ucontext的3.6倍。

总结来说,libco牺牲了通用性,把运营环境中用不到的寄存器拷贝去掉,对代码进行了极致优化,但是换取到了很高的性能。

协程在IO阻塞时可自动切换

我们希望的是,当协程中遇到阻塞IO的调用时,协程可以自行yield出去,等到调用结束,可以再resume回来,这些流程不用用户关心。

然而难点在于: 对于自己代码中的阻塞类调用尚且容易改造,可以把它改成非阻塞IO,然后框架内部进行yield和resume。但是大量三方库也存在着阻塞IO调用,如知名的mysqlclient就是阻塞IO,对于此类的IO调用,我们无法直接改造,不便于和我们现有的协程框架进行配合。

然而,libco的协程不仅可以做到IO阻塞协程的自动切换,甚至包括三方库的阻塞IO调用都可以零改造的自动切换。

libco巧妙运用了Linux的hook技术,同时配合了epoll事件循环,完美的完成了阻塞IO的协程化改造。

所谓系统函数hook,简单来说,就是替换原有的系统函数,例如read、write等,替换为自己的逻辑。所有关于hook系统函数的代码都在co_hook_sys_call.cpp中可以看到。

在分析具体代码之前,有个点需要先注意下:libco的hook逻辑用于client行为的阻塞类IO调用

client行为指的是,本地主动connect一个远程的服务,使用的时候一般先往socket中write数据,然后再read回包这种形式。

read函数的hook流程

我们以read函数为例,看下都做了什么:

ssize_t read( int fd, void *buf, size_t nbyte )n{n    struct pollfd pf = { 0 };n    pf.fd = fd;n    pf.events = ( POLLIN | POLLERR | POLLHUP );nn    int pollret = poll( &pf,1,timeout );nn    ssize_t readret = g_sys_read_func( fd,(char*)buf ,nbyte );n    return readret;n}n

上述代码对原有代码进行了简略,只保留了最核心的hook逻辑。

注意:这里poll函数实际上也是被hook过的函数,在这个函数中,最终会交由co_poll_inner函数处理。

co_poll_inner函数主要有三个作用:

1. 将poll的相关事件转换为epoll相关事件,并注册到当前线程的epoll中。

2. 注册超时事件,到当前的epoll中

3. 调用co_yield_ct, 让出该协程。

可以看到,调用poll函数之后,相关事件注册到了EventLoop中后,该协程就yield走了。

那么,什么时候,协程会再resume回来呢? 答案是:当epoll相关事件触发或者超时触发时,会再次resume该协程,处理接下来的流程。

协程resume之后,会接着处理poll之后的逻辑,也就是调用了g_sys_read_func。这个函数就是真实的linux的read函数。

libco使用dlsym函数获取了系统函数, 如下:

typedef ssize_t (*read_pfn_t)(int fildes, void *buf, size_t nbyte);nstatic read_pfn_t g_sys_read_func = (read_pfn_t)dlsym(RTLD_NEXT,"read");n

这个逻辑就非常巧妙了:

  • 从内部来看,本质上是个异步流程,在EventLoop中注册相关事件,当事件触发时就执行接下来的处理函数。
  • 从外部来看,调用方使用的时候函数行为和普通的阻塞函数基本一样,无需关系底层的注册事件、yield等过程。

这个就是libco的巧妙之处了,通过hook系统函数的方式,几乎无感知的改造了阻塞IO调用。

此外,libco也hook了系统的socket函数。在libco实现的socket函数中,会将fd变成非阻塞的(O_NONBLOCK)。

那么,为什么libco连mysql_client都可以一并协程化改造呢?

这是因为mysql_client里面的具体网络IO实现,也是用的Linux的那些系统函数connect、read、write这些函数。 所以,libco只用hook十几个socket相关的api,就可以将用到的三方库中的IO调用也一起协程化改造了。

read的超时处理

libco的read函数和普通的阻塞IO中的read函数,行为上稍微有一点不一样。

普通的read函数,如果一直没有消息可读,则会一直阻塞。 但是libco中的read函数,如果1秒钟之内socket依然不可读,则就认为read失败,返回-1。这也是read中注册超时事件的原因。

在client侧网络的IO调用里面,一般行为都是,write请求,然后read回包。 所以一定是会引入一个超时判断,判断该次调用是否超时。 同时,还要保证要保证read的行为和语义,与原有的系统函数保持一致。毕竟hook的目标是mysql_client这种三方库。 所以这个超时只能做在read内部,把超时当成一次read失败处理。

这样即能保证read原有行为,也能保证read不会一直阻塞。

但这里有个问题:libco把read的超时时间硬编码为1s,那么所有被hook的阻塞IO的read,一旦超过1s,就会被认为失败。 但对于某些特殊场景,会存在一些耗时请求,server端的处理时间确实有可能会超过1s。 对于这种情况,libco似乎也没有提供一个自定义超时时间的办法。

stCoEpoll_t结构体分析

libco的事件循环同时支持epoll和kqueue,libco会在每个线程维护一个stCoEpoll_t对象。 stCoEpoll_t结构体中维护了事件循环需要的数据。

struct stCoEpoll_tn{n    int iEpollFd;n    co_epoll_res *result; nn    struct stTimeout_t *pTimeout;  n    struct stTimeoutItemLink_t *pstTimeoutList; nn    struct stTimeoutItemLink_t *pstActiveList; n};n
  1. iEpollFd:epoll或者kqueue的fd
  2. result: 当前已触发的事件,给epoll或kevent用。如果是epoll的话,则是epoll_wait的已触发事件
  3. pTimeout:时间轮定时管理器。记录了所有的定时事件
  4. pstTimeoutList:本轮超时的事件
  5. pstActiveList: 本轮触发的事件。

此外,libco使用了时间轮来做超时管理,关于时间轮的原理分析网上比较多,这块也不是libco最核心的东西,就不在本文讨论了。

协程可以嵌套创建

libco的协程可以嵌套创建,协程内部可以创建一个新的协程。这里其实没有什么黑科技,只不过云风coroutine中不能实现协程嵌套创建,所以在这里单独讲下。 libco使用了一个栈维护协程调用过程。 我们模拟下这个调用栈的运行过程, 如下图所示:


图中绿色方块代表栈顶,同时也是当前正在运行的协程。

1. 当在主协程中co_resume到A协程时,当前运行的协程变更为A,同时协程A入栈。

2. A协程中co_resume到B协程,当前运行的协程变更为B,同时协程B入栈。

3. 协程B中调用co_yield_ct。协程B出栈,同时当前协程切换到协程A。

4. 协程A中调用co_yield_ct。协程B出栈,同时当前协程切换到主协程。

libco的协程调用栈维护stCoRoutineEnv_t结构体中,如下:

struct stCoRoutineEnv_tn{n    stCoRoutine_t *pCallStack[ 128 ]; n    int iCallStackSize; n    stCoEpoll_t *pEpoll; n};

其中pCallStack即是协程的调用栈,从参数可以看出,libco只能支持128层协程的嵌套调用,这个深度已经足够使用了。 iCallStackSize代表当前的调用深度。

libco的运营经验

libco的负责人leiffyli在purecpp大会上分享了libco的一些运营经验,个人觉得还是非常值得学习的,这里直接引用过来。

协程栈大小有限,接入协程的服务谨慎使用栈空间;

libco中默认每个协程的栈大小是128k,虽然可以自定义每个协程栈的大小,但是其大小依然是有限资源。避免在栈上分配大内存对象(如大数组等)。

池化使用,对系统中资源使用心中有数。随手创建与释放协程不是一个好的方式,有可能系统被过多的协程拖垮;

关于这点,libco的实例example_echosvr.cpp就是一个池化使用的例子。

协程不适合运行cpu密集型任务。对于计算较重的服务,需要分离计算线程与网络线程,避免互相影响;

这是因为计算比较耗时的任务,会严重拖慢EventLoop的运行过程,导致事件响应和协程调度受到了严重影响。

过载保护。对于基于事件循环的协程调度框架,建议监控完成一次事件循环的时间,若此时间过长,会导致其它协程被延迟调度,需要与上层框架配合,减少新任务的调度;

总结

libco巧妙的利用了hook技术,将协程的威力发挥的更加彻底,可以改良C++的RPC框架异步化后的回调痛苦。整个库除了基本的协程函数,又加入类pthread的一些辅助功能,让协程的通信更加好用。

然而遗憾的是,libco在开源方面做得并不是很好,后续bug维护和功能更新都不是很活跃。

但好消息是,据leiffyli的分享,目前有一些libco有一些实验中的特性,如事件回调、类golang的channel等,目前正在内部使用。相信后期也会同步到开源社区中。

参考

  • leiffyli:Libco分享
  • C/C++ 协程库 libco:微信怎样漂亮地完成异步化改造
  • 腾讯开源的 libco 号称千万级协程支持,那个共享栈模式原理是什么? - 江哈莫夫斯基的回答
  • libco协程库上下文切换原理详解
  • libco Github issue#41
  • man: dlsym
  • 协程:posix::ucontext用户级线程实现原理分析
  • man: read

方维配资 微信 源码:四方支付源码

  厦门红细胞集团有限公司(红细胞集团)成立于2007年,总部设立于美丽的鹭岛厦门,经过多年精心耕耘,现已成为一家大型综合性产业集团。主营业务涉及实业、股权、文化产业投资建设等项目。“创新转型、稳中求进、适度增长、效益优先”,集团力争发展成为“经营规模区域领先、战略布局基本成型、多种产业协同发展、核心能力初步构建、企业建设成果显著”的综合化、市场化、国际化的财团型企业。

  福建南方君安科技有限公司,隶属红细胞集团全资控股子公司,秉承红细胞一贯的品牌战略作风,以优秀的产品质量和良好的业界口碑,立足金融软件外包领域。我们拥有三千平方的办公场地,顶尖的科技人才,立志做最好的金融软件外包服务商。承接金融衍生品平台开发,包括并不限于股票系统、期权、期货、商城、直播、配资、新三板、基金、私募、股权等系统开发,APP开发、H5及PC客户端。对接上游券商资源及第三方支付通道。

  新聚合支付源码,支持支付宝,微信,网银,财付通,全渠道支付,其他第三方支付通道,完全开源,源码包括平台主站,商户后台,平台后台,及网关

  整站源码打包销售. 可协助实施站点上线到运营.

  【聚合支付源码】聚合支付平台源码 ,一次对接,全渠道聚合,多场景支持,

  拥有专业的产品运营团队,以及成熟的技术团队,现阶段聚合支付汹涌而至,丰富的市场空间,聚合支付作为对银行和第三方支付平台服务的拓展,聚合多家银行以及第三方支付平台支付能力,提供多渠道支付方式,简化支付对接,有着优质的服务。  厦门红细胞集团有限公司(红细胞集团)成立于2007年,总部设立于美丽的鹭岛厦门,经过多年精心耕耘,现已成为一家大型综合性产业集团。主营业务涉及实业、股权、文化产业投资建设等项目。“创新转型、稳中求进、适度增长、效益优先”,集团力争发展成为“经营规模区域领先、战略布局基本成型、多种产业协同发展、核心能力初步构建、企业建设成果显著”的综合化、市场化、国际化的财团型企业。

  福建南方君安科技有限公司,隶属红细胞集团全资控股子公司,秉承红细胞一贯的品牌战略作风,以优秀的产品质量和良好的业界口碑,立足金融软件外包领域。我们拥有三千平方的办公场地,顶尖的科技人才,立志做最好的金融软件外包服务商。承接金融衍生品平台开发,包括并不限于股票系统、期权、期货、商城、直播、配资、新三板、基金、私募、股权等系统开发,APP开发、H5及PC客户端。对接上游券商资源及第三方支付通道。

  新聚合支付源码,支持支付宝,微信,网银,财付通,全渠道支付,其他第三方支付通道,完全开源,源码包括平台主站,商户后台,平台后台,及网关

  整站源码打包销售. 可协助实施站点上线到运营.

  【聚合支付源码】聚合支付平台源码 ,一次对接,全渠道聚合,多场景支持,

  拥有专业的产品运营团队,以及成熟的技术团队,现阶段聚合支付汹涌而至,丰富的市场空间,聚合支付作为对银行和第三方支付平台服务的拓展,聚合多家银行以及第三方支付平台支付能力,提供多渠道支付方式,简化支付对接,有着优质的服务。

方维配资 微信 源码:用按键精灵玩微信「跳一跳」思路附源码

2018年1月2日修改:

本人写出脚本试了一下就把小程序删了,从评论知道大概微信已经开始封号了,所以:

本文主要目的是提供一个解题的思路,现在用这个貌似会被踢出排行榜了,请大家不要再用这个刷分了。

如果确实还是想刷分,请自行移步按键精灵论坛。

以下原文:

原创文章,应该也没有需要转载的,如果需要转载请注明作者,谢谢。

沉迷玩游戏的医学生狗一条,接触过一点if else。

这两天这小游戏在同学圈里流传甚广,颇有当年flappy bird的架势,正好我又是个手残,只能投机取巧来装逼了。


游戏试玩

  1. 通过按压时间的长短控制小人跳跃的远近,没有按压计时和距离的提示,只能靠手感控制→本游戏的唯一人为变量只有按压时间,适合机器操作
  2. 每跳到一个新方块上,小人所在方块会下移→初步感觉有一个固定的视角中心,即新方块和老方块中心的连线中点是固定的
  3. 跳到方块中点时,下一个方块的中心会有一个亮点,连续跳到亮点上会已2、4、6、8...的等差数列得分,但是如果在水井或者音乐盒之类的方块上停留时间过长,得到方块奖励分数后,连击奖励会清空→放弃固定分数奖励,追求连击
  4. 存在纯白色方块,亮点肉眼无法辨别→初步认为无法通过提取颜色进行区分

所用工具

  • 安卓1080p已root手机
  • 按键精灵安卓版

脚本思路

  1. 通过比较计算得知试玩第2条猜想正确,中心坐标为562.25, 979(竖屏,x轴最大1080,y轴最大1920)
  2. 问题转化为:假设上一步已跳到亮点的情况下,寻找当前小人坐标(x,y)到中心坐标之间的横向距离a,直线距离c与所需按压时间t之间的系数关系k1、k2,则有
a = Abs(x - 562.25)nb = Abs(y - 979)nc = Sqr(a ^ 2 + b ^ 2)n//对给定k1,则nt = a / k1nk2 = c / t

初步试验k1应该设定在3.08~3.28左右。

理想情况下,k1、k2比例应该固定,但在实际操作过程中,由于是寻找固定点坐标颜色的方式对小人进行定位,总会有一点误差,一开始还能连续跳在亮点上,后面则会出现跳不到亮点的情况,最终因误差积累导致跳出方块。

3.观察知此时k1、k2已经严重偏离前几次的比例,将前几次的比例关系用作约束条件,改变t的大小以期保证k1、k2的比例,对k2=c/t求导得,Δk2=-c/(t^2),则有

Function 逼近(t, c, k2)ntDim tt,kk2nttt = tntDonttkk2 = c / ttnttIf kk2 > k2 Then nttttt = tt + kk2 / ttnttElseIf rt < i Thenntt ttt = tt - kk2 / ttnttEnd IfntLoop Until Abs(kk2 - k2) < 0.00001ntreturn = ttnEnd Function

4.得到程序:

Dontstep += 1ntCall 按压屏幕()nt延时2snLoopnnSub 按压屏幕()ntDim k1,k2ntk1 = 0.318ntk2 = 确定k1下,前几次能跳到光点上的估计值nt//////////找图取色定位模块/////////////////nta = Abs(intX - 562.25)n        b = Abs(intY - 979)n   tc = (Sqr(a ^ 2 + b ^ 2))n        t = a / k1n        t = 逼近(t, c, k2)n   t//////////按压屏幕长达t//////////////nEnd Sub

5.运行后,可以达到长时间不跳出方块,但是连击次数还是偏少。我认为一是通过按键精灵自带的图色命令进行坐标定位确实会出现些微的误差,二是游戏本身可能在一定连击数时添加一些随机参数打断连击。

6.上网搜索相关的文章,看到 @神奇的战士 的文章,感谢大神的文章。

神奇的战士:教你用Python来玩微信跳一跳

虽然不懂Adb和Python Matplot,但是得到思路重要系数:假设上一步已跳到亮点的情况下,直接计算小人到下一个亮点的距离c2并得到按压时间t。但是此思路因试玩第四条猜测而一开始被放弃,于是我仔细去观察了白色方块上的亮点是否有区别,还真的有!但是非常小,亮点与周围rgb值只差1!玩的一手好心机!

亮点,RGB值F5F5F5
亮点周围,RGB值F6F6F6

7.通过检测亮点计算按压时间控制跳方格确实可以拿到很多连击,但是由于第5步中第二条猜想的缘故,存在断连击的现象,于是我把上面两种思路结合了起来,程序大致如下:

Dontstep += 1ntIf 能检测出亮点 Then nttCall 亮点计算时间()ntElse nttCall 按压屏幕()ntEnd Ifnt延时2s(超过2s会计算方块奖励清零联机奖励)tnLoop

结果

试运行了一次。。。效果拔群,但是并没有人来问怎么回事(摊手),大家可能都太忙了吧。只有我闲着蛋疼。。。

总结及其他

  1. 实际写的过程中其实还有个问题,由于上面说的按键精灵取色的局限性,比如搜寻方式是从左上至右下,可能导致向左跳和向右跳的参数有些许的不同(如下代码),不知道其他的工具是否会有这种情况。
  2. 第一次写文章,不知道规矩啥样,也不知道写的咋样,望大家批评指正。不知道是否有需要源码的朋友,也不知道能不能挂链接(网盘?按键论坛?),虽然源码也没啥注释。。。加了一些注释放在下面了,缩进似乎有些问题,请将就看吧。
  3. 小抱怨几句,毕竟是非专业人士,肝这个玩意就费了1晚上,而且数学功底还是差啊,心塞塞。
  4. 又试了一下,连击奖励原来最高只能到32,不过不影响整体思路。
  5. 生成了一个apk(仅支持1080p root手机),链接: 1kVvMz2n 密码: 4mp2。因为用按键精灵打包后会出现很多广告,所以有条件还是手机插着电脑用吧。有封号风险。

开发者对策

  1. 针对对中心点检测距离的方式,可以考虑改变视角移动的距离
  2. 针对检测亮点计算距离的方式,可以考虑按压后才出现亮点
  3. 增加一些彩蛋方块,增加路线选择,或者踩上去会炸等等增加游戏玩法,但这样是否偏离设计初衷就不得而知了

Dim ll=0.36'向右跳约束系数nDim rr=0.38'向左跳约束系数nDim 跳跃步数=0nDim 亮点坐标(),小人坐标()nnRandomizennDon    KeepCapture n    跳跃步数 = 跳跃步数 + 1n    亮点坐标 = 寻找亮点()n    小人坐标 = 寻找小人()n    If 亮点坐标(0) > 0 Then n        Call 检测光点(亮点坐标(0), 亮点坐标(1))n    Else n        Call 按压屏幕()n    End Ifn    TracePrint 跳跃步数n    Delay 2000 + Int((200 - (-200) + 1) * Rnd() - 200)nLoopnn////////思路模块//////////////////////////////////////////////////////nSub 按压屏幕()n    Dim intX=小人坐标(0)n    Dim intY=小人坐标(1)n    Dim a,b,c,tt,rtn    Dim in    Dim k=0.308'向右跳系数n    If intX > 0 Then n        i=lln        If intX > 540 Then '小人在屏幕右半侧n            k = 0.328'向左跳系数n            i=rrn        End Ifn        a = Abs(intX - 562.25)n        b = Abs(intY - 979)n        c = (Sqr(a ^ 2 + b ^ 2))n//tTracePrint a,b,cn        tt = a / kn        tt = 逼近(tt, c, i)n        rt=c/ttn        TracePrint rt,ttn        ShowMessage "没找到点"n        Touch 749, 1504, ttn    End If    nEnd SubnnFunction 逼近(tt, c, i)ntDim t=ttntDim rt=c/tntDonttrt=c/tnttIf rt > i Then ntttt = t + rt / tnttElseIf rt < i Thenntt tt = t - rt / tnttEnd IfntLoop Until Abs(rt - i) < 0.00001nt逼近=tnEnd FunctionnnSub 检测光点(x,y)ntDim intX=小人坐标(0)n        Dim intY=小人坐标(1)n        Dim a,b,c,tt,rttn        a = Abs(intX - x)n        b = Abs(intY - y)n   tc = (Sqr(a ^ 2 + b ^ 2))n   tTracePrint a,b,cn   tShowMessage "找到点了"n   tTouch 749, 1504,c*1.393nEnd Subnn/////////图色模块//////////////////////////////////////////////////////////////nFunction 寻找亮点()ntDim x,yntFindMultiColor 128, 717, 912, 1142, "F5F5F5","-19|-6|F5F5F5,18|-1|F5F5F5", 0, 1, x, yn//tTracePrint x,yntIf x < 0 Then nttFindMultiColor 128, 717, 912, 1142, "F5F5F5","-19|-5|F5F5F5,19|-3|F5F5F5", 0, 1, x, yntEnd IfntIf x < 0 Then nttFindMultiColor 128, 717, 912, 1142, "F5F5F5","-17|-9|F5F5F5,18|-3|F5F5F5", 0, 1, x, yntEnd Ifn//tTracePrint x,ynt寻找亮点=array(x,y)nEnd FunctionnnFunction 寻找小人()ntDim intX,intYntFindMultiColor 3, 788, 1073, 1513, "613837", "-38|1|492B2B,37|0|51363A,-1|-118|3A3434,0|17|663C36,-1|-156|76484F", 0, 0.95, intX, intYn//tTracePrint intX,intYn        If intX < 0 Then     tn    t    FindMultiColor 3, 788, 1073, 1513, "633939", "-37|0|492B2B,37|0|53383C,1|-187|3D3534", 0, 0.9, intX, intYn    t    TracePrint intX,intYn        End Ifn//      TracePrint intX,intYnt寻找小人=array(intX, intY)nEnd Function

被同学石锤开挂orz

配资技巧!股票配资警戒线比例是多少?

猜您喜欢

更多与方维配资 微信 源码相关文章