资源加载中... loading...

EventLoop

监听事件,有任意事件发生时返回。

返回的对象如果不为空值,则返回内容中包含的Event为事件触发类型。例如以下返回值结构:

{"Seq":10,"Event":"tick","ThreadId":0,"Index":0,"Nano":1689216222796834300,"Symbol":"rb2311","Ticker": {...}}

object

EventLoop() EventLoop(timeout)

参数timeout为超时设置,单位为毫秒。 参数timeout如果设置为0则等待有事件发生才返回,如果大于0就是设置事件等待超时,小于0立即返回最近事件。 timeout false number

function main(){
    while(true){
        // 需要在判断exchange.IO("status")函数返回true,即为真值时才可调用行情、交易等函数
        if(exchange.IO("status")){
            exchange.SetContractType("rb888")            
            LogStatus(_D(), "已经连接CTP !")
            var msg = EventLoop()
            Log(msg)
        } else {
            LogStatus(_D(), "未连接CTP !")
        }
    }
}
# 不支持EventLoop函数
// 不支持EventLoop函数

代码中第一次调用EventLoop()函数才会初始化该监听事件的机制,如果在事件回调之后才开始首次EventLoop()调用,会错过之前的事件。 底层系统封装的队列结构会缓存最大500个事件回调,如果程序执行过程中没有及时调用EventLoop()函数取出,会丢失500个缓存之外较晚的事件回调。 EventLoop()函数的调用不会影响系统底层WebSocket的缓存队列。 对于这些缓存依然需要使用各自的方法取出数据。对于在EventLoop()函数返回之前,已经取出的数据,不会在EventLoop()函数中产生返回事件。 EventLoop()函数的主要用途就是通知策略层,系统底层接收到了新的网络数据。以事件驱动整个策略。当EventLoop()函数返回事件时, 只需遍历所有数据来源。 EventLoop()函数仅支持实盘。 在主函数main()中调用时,监听主线程的事件。 在JavaScript语言编写的策略中,threading.Thread()函数创建的线程,在线程的执行函数中也可以调用,监听当前线程的事件。

{@fun/Global/Dial Dial}

UUID __Serve