监听事件,当有任意事件发生时返回。
返回的对象如果不为空值,则返回内容中包含的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 !")
}
}
}
“`python
// 不支持EventLoop函数
代码中第一次调用EventLoop()
函数时才会初始化事件监听机制,如果在事件回调之后才首次调用EventLoop()
,将会错过之前的事件。底层系统封装的队列结构会缓存最多500个事件回调,如果程序执行过程中没有及时调用EventLoop()
函数取出事件,超出500个缓存的后续事件回调将会丢失。EventLoop()
函数的调用不会影响系统底层WebSocket的缓存队列。
对于这些缓存数据仍需要使用各自的方法取出。对于在EventLoop()
函数返回之前已经取出的数据,不会在EventLoop()
函数中产生返回事件。EventLoop()
函数的主要用途是通知策略层系统底层接收到了新的网络数据,以事件驱动整个策略。当EventLoop()
函数返回事件时,只需遍历所有数据源即可。
EventLoop()
函数仅支持实盘交易。
在主函数main()
中调用时,监听主线程的事件。在JavaScript
语言编写的策略中,通过threading.Thread()
函数创建的线程,在线程的执行函数中也可以调用,用于监听当前线程的事件。
{@fun/Global/Dial Dial}