输入/搜索内容
内置函数
Global
Version
Sleep
IsVirtual
Mail
Mail_Go
SetErrorFilter
GetPid
GetLastError
GetCommand
GetMeta
Dial
HttpQuery
HttpQuery_Go
Encode
UnixNano
Unix
GetOS
MD5
DBExec
UUID
EventLoop
_G
_D
_N
_C
_Cross
JSON.parse
JSON.stringify
SetChannelData
GetChannelData
Log
Market
Trade
Account
Futures
Threads
TA
Talib
OS
结构体
内置变量

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

EventLoop()
EventLoop(timeout)

示例

连接CTP后等待并输出事件。

javascript
function main(){ while(true){ // 需要在判断exchange.IO("status")函数返回1(真值)时才可调用行情、交易等函数 if(exchange.IO("status")){ exchange.SetContractType("rb888") LogStatus(_D(), "已经连接CTP !") var msg = EventLoop() Log(msg) } else { LogStatus(_D(), "未连接CTP !") Sleep(1000) } } }
python
def main(): while True: # 需要在判断exchange.IO("status")函数返回1(真值)时才可调用行情、交易等函数 if exchange.IO("status"): exchange.SetContractType("rb888") LogStatus(_D(), "已经连接CTP !") msg = EventLoop() Log(msg) else: LogStatus(_D(), "未连接CTP !") Sleep(1000)
rust
fn main() { loop { // 需要在判断exchange.IO("status")函数返回1(真值)时才可调用行情、交易等函数 if exchange.IO("status").is_ok_and(|v| v.as_i64() == Some(1)) { exchange.SetContractType("rb888").unwrap(); LogStatus!(_D(None), "已经连接CTP !"); let msg = EventLoop(0); Log!(msg); } else { LogStatus!(_D(None), "未连接CTP !"); Sleep(1000); } } }

返回值

类型描述

object

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

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

参数

名称类型必填描述

timeout

number

否

超时时间,单位为毫秒。
当参数timeout设置为0时,函数会持续等待,直到有事件发生才返回;当设置为大于0的值时,表示事件等待的超时时间;当设置为小于0的值时,立即返回最近的事件。

参考

备注

只有在代码中第一次调用EventLoop()函数时,才会初始化该事件监听机制。如果在事件回调发生之后才首次调用EventLoop()函数,则会错过此前发生的事件。底层系统封装的队列结构最多可缓存500个事件回调,如果程序运行过程中未及时调用EventLoop()函数取出,超出500个缓存容量的较晚事件回调将会丢失。EventLoop()函数的调用不会影响系统底层WebSocket的缓存队列。

对于这些缓存,仍需使用各自对应的方法取出数据。对于在EventLoop()函数返回之前已经取出的数据,不会在EventLoop()函数中产生返回事件。EventLoop()函数的主要用途是通知策略层:系统底层已接收到新的网络数据,从而以事件驱动整个策略。当EventLoop()函数返回事件时,只需遍历所有数据来源即可。EventLoop()函数仅支持实盘。

在主函数main()中调用时,监听主线程的事件。在使用JavaScript语言编写的策略中,对于由threading.Thread()函数创建的线程,也可以在其执行函数中调用该函数,以监听当前线程的事件。