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

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


Алгоритм который я использую подразумевает вызов метода 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