c# - 检查是否过了 x 秒,如果不等到 x 秒
问题描述
我正在努力解决一个问题。这是针对交易机器人的,在交易所中,有一个规则。交易后不能交易,如果要交易,必须在第一次交易后等待 5 秒。5 秒后,交易由您决定,买、卖或什么都不做。
我有秒表,我打电话aFunction
,功能结束后,计时器将启动,我打电话bFunction
,如果计时器值<5秒,它应该等到5秒过去。
我做了一个while(true)
,我可以检查if(timer>5)
,但它会吃 cpu,如果它是单核,它将在 5 秒内无限循环。
有什么c#方法吗?或任何想法?对不起我的英语和任何帮助表示赞赏。
更新
如果之前没有交易(5 秒或更多),它不应该等待 5 秒。所以线程睡眠或定时器不起作用。
解决方案
这是一个基于计时器的解决方案。需要注意的重要事项是
.NET 中有几个计时器类。选择最适合您的。
了解
Thread
计时器触发的内容非常重要。计时器不会完全按照您设置的时间间隔触发
public class Trade { public string Symbol { get; } public DateTime TradeTimeUTC { get; } } public class Order { public string Symbol { get; } } public void SendOrder(Order order) { //Find most recent trade for this order, out of scope here var trade = GetMostRecentTrade(order); var differenceInTime = DateTime.UtcNow - trade.TradeTimeUTC; if (differenceInTime.TotalSeconds >= 5) { ActuallySendOrder(order); return; } System.Timers.Timer timer = new System.Timers.Timer() { AutoReset = false, Interval = differenceInTime.TotalMilliseconds }; //You're on a ThreadPool thread when this fires, adjust accordingly timer.Elapsed += (s, e) => { ActuallySendOrder(order); }; timer.Start(); }
推荐阅读
- android - 尽管添加了项目(文本框等),但布局预览显示为空白。甚至项目名称也没有出现在屏幕上
- regex - 从文本文件中获取姓名和年龄
- java - 大小无法解析或不是字段
- go - 如何使用 VGO 导入和更新子包
- javascript - fullpage.js - 触发响应后,jQuery.position() 和 .offset() 仍然返回 0,0
- mysql - MySQL 更新错误不正确的日期时间值
- jenkins - 该请求中不包含有效的面包屑
- javascript - 将 js 数组转换为字典/哈希图
- java - 组合框不使用 setCellFactory 添加元素
- profiler - Xcode GPU 着色器分析器