EventLoop
监听事件,当有任意事件发生时返回。
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 | 如果返回的对象不为空值,则返回内容中包含的
|
参数
| 名称 | 类型 | 必填 | 描述 |
timeout | number | 否 | 超时时间,单位为毫秒。 |
参考
备注
只有在代码中第一次调用EventLoop()函数时,才会初始化该事件监听机制。如果在事件回调发生之后才首次调用EventLoop()函数,则会错过此前发生的事件。底层系统封装的队列结构最多可缓存500个事件回调,如果程序运行过程中未及时调用EventLoop()函数取出,超出500个缓存容量的较晚事件回调将会丢失。EventLoop()函数的调用不会影响系统底层WebSocket的缓存队列。
对于这些缓存,仍需使用各自对应的方法取出数据。对于在EventLoop()函数返回之前已经取出的数据,不会在EventLoop()函数中产生返回事件。EventLoop()函数的主要用途是通知策略层:系统底层已接收到新的网络数据,从而以事件驱动整个策略。当EventLoop()函数返回事件时,只需遍历所有数据来源即可。EventLoop()函数仅支持实盘。
在主函数main()中调用时,监听主线程的事件。在使用JavaScript语言编写的策略中,对于由threading.Thread()函数创建的线程,也可以在其执行函数中调用该函数,以监听当前线程的事件。