我正在使用 C++ 和 MFC 创建一个应用程序,该应用程序将实时从 Bloomberg 中提取信息。Bloomberg API 有一个订阅类,它将“订阅”来自 Bloomberg 的更新并将它们实时推送到我的 PC,因此我需要在线程中运行一个事件循环来处理 Bloomberg 数据。
为了节省带宽,我想使用字典将Bloomberg股票代码映射到它的最后价格,所以不是为同一个股票代码获得多个结果(即我多次有相同的股票代码),程序会做一个在字典中查找。这样,我只需要订阅不同的代码。
我以前没有使用过多线程,我一直在阅读 MSDN 中的文档,但是我在理解我需要做什么时遇到了很多麻烦。
根据我的理解,我需要使用 AfxBeginThread() 创建一个工作线程,并传入一个指向字典实例的指针。工作线程将在我的程序的其余部分运行时更新字典。
这本字典被线程锁定了吗?我可以在更新时安全地访问它吗?
我可以让线程在后台运行直到程序终止吗?终止程序时是否需要显式终止线程还是会自动完成?
这听起来对吗,还是我错过了一些基本的东西?
所以我创建了一个 CMap(CString,LPCSTR,double, double) 来存储代码和定价。我通过 LPVOID 传递一个指向 CMap 的指针,并且 CMap 得到实时更新。现在一切正常。我可以在 CMap 中查找变量并获得实时定价。
但是,现在,它不是“线程安全的”。只有一个线程向 CMap 写入数据,其他一切都只是读取 CMap 中的数据,所以现在,这没什么大不了的。
但是,为了学习良好的编程实践,我应该在写入 CMap 时使用 CEvent 吗?CEvent 应该被传递到线程中吗?我不确定这是如何实现的。我做了一个快速的谷歌搜索,我没有找到任何我理解的关于如何在线程中锁定和解锁变量的信息。