Я работаю с C ++ и MFC над созданием приложения, которое будет извлекать информацию из Bloomberg в режиме реального времени.Bloomberg API имеет класс подписки, который будет «подписываться» на обновления от Bloomberg и отправлять их на мой компьютер в режиме реального времени, поэтому мне нужно запустить цикл обработки событий в потоке для обработки данных Bloomberg.
ЧтобыЧтобы сохранить пропускную способность, я хочу использовать словарь для сопоставления тикера Bloomberg с его последней ценой, поэтому вместо получения нескольких результатов для одного и того же тикера (т. е. у меня один и тот же тикер несколько раз), программа выполнит поиск втолковый словарь.Таким образом, мне нужно подписаться только на разные тикеры.
Я не работал с многопоточностью раньше, и я читал документацию в MSDN, но у меня много проблем с пониманием того, что мне нужноdo.
Исходя из моего понимания, мне нужно создать рабочий поток с помощью AfxBeginThread () и передать указатель на экземпляр словаря.Рабочий поток будет обновлять словарь, пока работает остальная часть моей программы.
Этот словарь заблокирован потоком?Могу ли я безопасно получить к нему доступ во время его обновления?
Могу ли я просто оставить поток работающим в фоновом режиме до завершения программы?Нужно ли мне явно уничтожать поток, когда я завершаю программу, или это будет сделано автоматически?
Это звучит правильно, или я упускаю что-то фундаментальное?
Итак, я создалCMap (CString, LPCSTR, double, double) для хранения тикеров и цен.Я передаю указатель на CMap через LPVOID, и CMap обновляется в режиме реального времени.Это все работает сейчас.Я могу искать переменные в CMap и получать цены в режиме реального времени.
Однако, сейчас, это не "потокобезопасно".Есть только один поток, который когда-либо пишет в CMap, а все остальное просто читает данные в CMap, так что на данный момент это не имеет большого значения.
Однако, в интересах изучения хороших практик программирования,Я должен использовать CEvent при записи в CMap?CEvent должен быть передан в поток?Я не уверен, как это реализовано.Я сделал быстрый поиск в Google, и я не нашел ничего, что я понял о том, как заблокировать и разблокировать переменную в потоке.