Исполнение Strategy по Событию, а не по Интервалу.


Исполнение Strategy по Событию, а не по Интервалу.
Atom
08.06.2010


Алгоритм который я использую подразумевает вызов метода process()
класса Strategy не по интервалу а по событию изменение цены.
Каким образом можно осуществить это?

Теги:


Спасибо:


< 1 2 3 
ustas

Фотография
Дата: 15.07.2010
Ответить


Спасибо, я так и думал.

Просто до этого Вы писали про "Strategy.Process" поэтому я и хотел
уточнить.

С уважением!

Спасибо:

Serg

Фотография
Дата: 24.08.2010
Ответить


а если стратегия подписалась на два стакана? и при изменении любого
вызывается OnProcess. Как сделать так чтобы в момент обновления
первого стакана и и работы OnProcess обновился второй но НЕ вызвал
OnProcess?
Спасибо:

Иванов Андрей

Фотография
Дата: 25.08.2010
Ответить


В своём наследнике Strategy делаете поле int _inUse;
В начале переопределённого OnProcess() пишете примерно так:

int inUse = Interlocked.CompareExchange(ref _inUse, 1, 0);
if (inUse == 0)
{
try
{
// ваша логика

finally
{
Interlocked.Exchange(ref _inUse, 0);

Это самый эффективный способ блокирования от параллельной работы. Ещё
есть метод для ленивых, с семафором. Объявляете филд SemaphoreSlim
_lock = new SemaphoreSlim(1,1);

В OnProcess примерно так:
if (_lock.Wait(0))
{
try
{
// логика

finally
{
_lock.Release();

Короче на одну строку, меньше цифр, а разницу в скорости вы никогда в
жизни не увидите.

Спасибо:

Serg

Фотография
Дата: 25.08.2010
Ответить


огромное спасибо. буду пробовать
Спасибо:
< 1 2 3 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy