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

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


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