объект — C ++ переменная мониторинга для измененного значения

Я конвертирую код индикатора TradeStation EasyLanguage в C ++ DLL. Используя TradeStation API, можно получить доступ к рыночным данным в C ++ DLL следующим образом:

double currentBarDT = pELObject->DateTimeMD[iDataNumber]->AsDateTime[0];

Мой вопрос:

Возможно ли в C ++ как-то «смотреть» или «слушать», когда значение переменной «currentBarDT» изменилось / обновилось? Я хотел бы использовать изменение значения в качестве триггера для генерации сигнала с Boost.Signals2.

7

Решение

Вы можете использовать переменную условия, которая соответствует вашим потребностям.

http://en.cppreference.com/w/cpp/thread/condition_variable/notify_all

в сигналах вы обновляете свои рыночные данные (i)

в ожидании вы помещаете переменную условия в i (например, есть запас на определенном уровне)

Скажите, если вам нужна дополнительная информация, я могу подробно изложить ее.

#include <stdlib.h>     /* srand, rand */
#include <iostream>
#include <condition_variable>
#include <thread>
#include <chrono>
#include <atomic>
std::condition_variable cv;
std::mutex cv_m;
double StockPrice;//price of the stock
std::atomic<int> NbActiveThreads=0;//count the number of active alerts to the stock market

void waits(int ThreadID, int PriceLimit)
{
std::unique_lock<std::mutex> lk(cv_m);
cv.wait(lk, [PriceLimit]{return StockPrice >PriceLimit ;});
std::cerr << "Thread "<< ThreadID << "...Selling stock.\n";
--NbActiveThreads;
}

void signals()
{
while (true)
{
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cerr << "GettingPrice "<<std::endl;
std::unique_lock<std::mutex> lk(cv_m);
/* generate secret number between 1 and 10: */
StockPrice = rand() % 100 + 1;
std::cerr << "Price =" << StockPrice << std::endl;
cv.notify_all();//updates the price and sell all the stocks if needed
if (NbActiveThreads==0)
{
std::cerr <<"No more alerts "<<std::endl;
return;
}
}

}

int main()
{
NbActiveThreads=3;
std::thread t1(waits,1,20), t2(waits,2,40), t3(waits,3,95), t4(signals);
t1.join();
t2.join();
t3.join();
t4.join();
return 0;
}

надеюсь, это поможет

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]