Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 定时器/线程冷却_C++_Multithreading_Caching_Trading_Timer Jobs - Fatal编程技术网

C++ 定时器/线程冷却

C++ 定时器/线程冷却,c++,multithreading,caching,trading,timer-jobs,C++,Multithreading,Caching,Trading,Timer Jobs,我有一个小项目,需要跟踪特定时间间隔的股票价格%的变动。例如,它应该能够跟踪过去30秒、1分钟、3分钟、5分钟、10分钟内AAPL价格%的变动。所有股票的时间间隔相同。程序将用C++编写,并将在Linux上运行,虽然它不重要。 下面是我想到的方法 1) 从多播提要获取股市数据,大约4000个符号 2) 处理提要并将其存储在全局引号缓存中 3) 生成N个线程,每个间隔一个 4) 每个线程将维护自己的符号副本,在启动时使用全局缓存中的当前价格初始化每个符号,然后在指定的时间间隔内进入睡眠状态 5)

我有一个小项目,需要跟踪特定时间间隔的股票价格%的变动。例如,它应该能够跟踪过去30秒、1分钟、3分钟、5分钟、10分钟内AAPL价格%的变动。所有股票的时间间隔相同。程序将用C++编写,并将在Linux上运行,虽然它不重要。 下面是我想到的方法

1) 从多播提要获取股市数据,大约4000个符号

2) 处理提要并将其存储在全局引号缓存中

3) 生成N个线程,每个间隔一个

4) 每个线程将维护自己的符号副本,在启动时使用全局缓存中的当前价格初始化每个符号,然后在指定的时间间隔内进入睡眠状态

5) 唤醒时,捕捉当前价格(从quote缓存中获取,该缓存将具有quotes提要中的最新值),计算差异,将此信息推送到队列中

6) 使用专用线程读取队列并将价格发布到缓存服务器

7) 前端GUI应用程序从缓存服务器读取并显示移动百分比


这种方法应该有效,但有更好的方法吗?另外,优化的一个方面可能是合并线程价格捕捉部分(线程唤醒后),如果两个或更多线程将同时捕捉,例如,30秒、1分钟和2分钟的线程将每两分钟捕捉一次,因此将它们合并为一个捕捉。我可以使用什么逻辑进行合并?谢谢。

您可以使用一个线程和一个计时器链来完成此操作。每只股票进入一个优先级队列,按下一次需要报价的时间排序。程序进入睡眠状态,在队列中第一时间醒来。此股票和同时到期的所有股票读取并显示,然后在下次显示时在队列中被替换。然后程序返回睡眠状态,直到第一次进入队列。这样没有同步问题。谢谢你的建议。因此,我必须在队列中的每个间隔中为每个符号维护一个对象(带有符号、到期日、价格)。线程不断地读取队列并查看每个对象的时间是否已到,如果已到,则计算diff和publish。然后重新创建/重用对象,更新价格和到期日,并将其放回队列中。我理解对了吗?接近。您不必经常阅读队列。只需为队列中的第一个项目将要过期设置一个计时器,睡眠直到计时器熄灭,然后读取并重新分配,直到时间改变。然后为新的时间设定一个计时器,然后回去睡觉。这是一个很好的方法,非常感谢。希望在实现后,我会发布完整的解决方案。