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

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


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

Tags:


Thanks:


< 1 2 3 
ustas

Avatar
Date: 7/15/2010
Reply


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

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

С уважением!

Thanks:

Serg

Avatar
Date: 8/24/2010
Reply


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

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

Avatar
Date: 8/25/2010
Reply


В своём наследнике 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();

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

Thanks:

Serg

Avatar
Date: 8/25/2010
Reply


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

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy