﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Еще раз про событийную модель</title>
  <id>~/topic/1631/eshshe-raz-pro-sobytiinuyu-model/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-05T18:19:18Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1631" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/8554/</id>
    <title type="text">День добрый! Подскажите, проверка условия When и действие Do выполняются в одном потоке или в разных...</title>
    <published>2011-06-02T07:03:39Z</published>
    <updated>2011-06-02T07:03:39Z</updated>
    <author>
      <name>InsiderHSE</name>
      <uri>https://stocksharp.ru/users/6099/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">День добрый! Подскажите, проверка условия When и действие Do выполняются в одном потоке или в разных?&lt;br /&gt;Использую следующий код (трэйдер в асинхронном режиме):&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;class MyStrategy : ActionStrategy&lt;br /&gt;    {&lt;br /&gt;        public MyStrategy(TimeSpan t)&lt;br /&gt;        {&lt;br /&gt;            _timeFrame = t;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        private readonly TimeSpan _timeFrame;&lt;br /&gt;&lt;br /&gt;        private CandleManager _candleManager;&lt;br /&gt;&lt;br /&gt;        public CandleManager CandleManager&lt;br /&gt;        {&lt;br /&gt;            get { return _candleManager; }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                _candleManager = value;&lt;br /&gt;&lt;br /&gt;                When(Signal1).Do(Action1)&lt;br /&gt;                    .MakePeriodical(); // сделать событие периодичным&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private bool Signal1()&lt;br /&gt;        {&lt;br /&gt;            Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - проверяем сигнал&amp;quot;);&lt;br /&gt;            //проверяем, сдвинулись ли границы текущей свечки&lt;br /&gt;            bool needchange = _timeFrame.GetCandleBounds(base.Trader).Max &amp;gt; _сandleBounds.Max;&lt;br /&gt;            bool rez = _candleManager.GetTimeFrameCandle(Security, _timeFrame, _сandleBounds.Max) != null;&lt;br /&gt;            //если текущая свечка сдвинулась, а предыдущая не была получна, значит не было сделок - получаем новые границы ожидаемой свечки&lt;br /&gt;            if (!rez &amp;amp;&amp;amp; needchange)&lt;br /&gt;            { _сandleBounds = _timeFrame.GetCandleBounds(base.Trader); }&lt;br /&gt;            return rez;&lt;br /&gt;        }&lt;br /&gt;        private void Action1()&lt;br /&gt;        {&lt;br /&gt;            Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - Запускаем действие&amp;quot;);&lt;br /&gt;&lt;br /&gt;            // запоминаем новое время следущей свечки&lt;br /&gt;            _сandleBounds = _timeFrame.GetCandleBounds(base.Trader);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private Range&amp;lt;DateTime&amp;gt; _сandleBounds;&lt;br /&gt;&lt;br /&gt;        protected override void OnRunning()&lt;br /&gt;        {&lt;br /&gt;            Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - вызван OnRunning&amp;quot;);&lt;br /&gt;            // получаем границы текущей свечки&lt;br /&gt;            _сandleBounds = _timeFrame.GetCandleBounds(base.Trader);&lt;br /&gt;            _candleManager.CandlesFinished += (t,c) =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    Debug.WriteLine(DateTime.Now.ToLongTimeString() + &amp;quot; - пришла свечка: &amp;quot; + c.First().Time.ToLongTimeString());&lt;br /&gt;                };&lt;br /&gt;            base.OnRunning();&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ожидается, что когда будет приходить новая свечка, будет запускаться действие. Однако на практике часто после прихода новой свечки действие запускается 2 раза (видимо потому что пока выполняется Do, When успевает еще раз провериться). А иногда после прихода свечки действие не запускается (например, 10:45:30, 10:45:44) (не понимаю почему =( )&lt;br /&gt;Запускаю с интервалом 2 секунды и получаю следующий вывод:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;10:44:18 - вызван OnRunning&lt;br /&gt;10:44:19 - проверяем сигнал&lt;br /&gt;10:44:20 - проверяем сигнал&lt;br /&gt;10:44:21 - пришла свечка: 10:44:22&lt;br /&gt;10:44:21 - проверяем сигнал&lt;br /&gt;10:44:21 - Запускаем действие&lt;br /&gt;10:44:22 - проверяем сигнал&lt;br /&gt;10:44:22 - пришла свечка: 10:44:24&lt;br /&gt;10:44:23 - проверяем сигнал&lt;br /&gt;10:44:23 - Запускаем действие&lt;br /&gt;10:44:24 - проверяем сигнал&lt;br /&gt;10:44:25 - проверяем сигнал&lt;br /&gt;10:44:26 - пришла свечка: 10:44:26&lt;br /&gt;10:44:26 - проверяем сигнал&lt;br /&gt;10:44:26 - Запускаем действие&lt;br /&gt;10:44:27 - проверяем сигнал&lt;br /&gt;10:44:27 - Запускаем действие&lt;br /&gt;10:44:28 - пришла свечка: 10:44:30&lt;br /&gt;10:44:28 - проверяем сигнал&lt;br /&gt;10:44:28 - Запускаем действие&lt;br /&gt;10:44:29 - проверяем сигнал&lt;br /&gt;10:44:29 - Запускаем действие&lt;br /&gt;10:44:30 - проверяем сигнал&lt;br /&gt;10:44:31 - проверяем сигнал&lt;br /&gt;10:44:32 - пришла свечка: 10:44:32&lt;br /&gt;10:44:32 - проверяем сигнал&lt;br /&gt;10:44:32 - пришла свечка: 10:44:34&lt;br /&gt;10:44:33 - проверяем сигнал&lt;br /&gt;10:44:33 - Запускаем действие&lt;br /&gt;10:44:34 - проверяем сигнал&lt;br /&gt;10:44:35 - пришла свечка: 10:44:36&lt;br /&gt;10:44:35 - проверяем сигнал&lt;br /&gt;10:44:35 - Запускаем действие&lt;br /&gt;10:44:36 - проверяем сигнал&lt;br /&gt;10:44:37 - пришла свечка: 10:44:38&lt;br /&gt;10:44:37 - проверяем сигнал&lt;br /&gt;10:44:37 - Запускаем действие&lt;br /&gt;10:44:38 - пришла свечка: 10:44:40&lt;br /&gt;10:44:38 - проверяем сигнал&lt;br /&gt;10:44:38 - Запускаем действие&lt;br /&gt;10:44:39 - проверяем сигнал&lt;br /&gt;10:44:39 - Запускаем действие&lt;br /&gt;10:44:40 - проверяем сигнал&lt;br /&gt;10:44:41 - пришла свечка: 10:44:42&lt;br /&gt;10:44:41 - проверяем сигнал&lt;br /&gt;10:44:41 - Запускаем действие&lt;br /&gt;10:44:42 - проверяем сигнал&lt;br /&gt;10:44:43 - пришла свечка: 10:44:44&lt;br /&gt;10:44:43 - проверяем сигнал&lt;br /&gt;10:44:43 - Запускаем действие&lt;br /&gt;10:44:44 - пришла свечка: 10:44:46&lt;br /&gt;10:44:44 - проверяем сигнал&lt;br /&gt;10:44:44 - Запускаем действие&lt;br /&gt;10:44:45 - проверяем сигнал&lt;br /&gt;10:44:45 - Запускаем действие&lt;br /&gt;10:44:46 - пришла свечка: 10:44:48&lt;br /&gt;10:44:46 - проверяем сигнал&lt;br /&gt;10:44:46 - Запускаем действие&lt;br /&gt;10:44:47 - проверяем сигнал&lt;br /&gt;10:44:47 - Запускаем действие&lt;br /&gt;10:44:48 - проверяем сигнал&lt;br /&gt;10:44:49 - пришла свечка: 10:44:50&lt;br /&gt;10:44:49 - проверяем сигнал&lt;br /&gt;10:44:49 - Запускаем действие&lt;br /&gt;10:44:50 - пришла свечка: 10:44:52&lt;br /&gt;10:44:50 - проверяем сигнал&lt;br /&gt;10:44:50 - Запускаем действие&lt;br /&gt;The thread &amp;#39;&amp;lt;No Name&amp;gt;&amp;#39; (0x1734) has exited with code 0 (0x0).&lt;br /&gt;10:44:51 - проверяем сигнал&lt;br /&gt;10:44:51 - Запускаем действие&lt;br /&gt;10:44:52 - проверяем сигнал&lt;br /&gt;10:44:53 - проверяем сигнал&lt;br /&gt;10:44:54 - проверяем сигнал&lt;br /&gt;10:44:55 - проверяем сигнал&lt;br /&gt;10:44:56 - проверяем сигнал&lt;br /&gt;10:44:56 - пришла свечка: 10:44:54&lt;br /&gt;10:44:57 - проверяем сигнал&lt;br /&gt;10:44:57 - Запускаем действие&lt;br /&gt;10:44:58 - проверяем сигнал&lt;br /&gt;10:44:58 - пришла свечка: 10:45:00&lt;br /&gt;10:44:59 - проверяем сигнал&lt;br /&gt;10:44:59 - Запускаем действие&lt;br /&gt;10:45:00 - проверяем сигнал&lt;br /&gt;10:45:00 - пришла свечка: 10:45:02&lt;br /&gt;10:45:01 - проверяем сигнал&lt;br /&gt;10:45:01 - Запускаем действие&lt;br /&gt;10:45:02 - проверяем сигнал&lt;br /&gt;10:45:03 - пришла свечка: 10:45:04&lt;br /&gt;10:45:03 - проверяем сигнал&lt;br /&gt;10:45:03 - Запускаем действие&lt;br /&gt;10:45:04 - проверяем сигнал&lt;br /&gt;10:45:04 - пришла свечка: 10:45:06&lt;br /&gt;10:45:05 - проверяем сигнал&lt;br /&gt;10:45:05 - Запускаем действие&lt;br /&gt;10:45:06 - проверяем сигнал&lt;br /&gt;10:45:07 - проверяем сигнал&lt;br /&gt;10:45:08 - проверяем сигнал&lt;br /&gt;10:45:08 - пришла свечка: 10:45:08&lt;br /&gt;10:45:09 - проверяем сигнал&lt;br /&gt;10:45:09 - Запускаем действие&lt;br /&gt;10:45:10 - пришла свечка: 10:45:12&lt;br /&gt;10:45:10 - проверяем сигнал&lt;br /&gt;10:45:10 - Запускаем действие&lt;br /&gt;10:45:11 - проверяем сигнал&lt;br /&gt;10:45:11 - Запускаем действие&lt;br /&gt;10:45:12 - проверяем сигнал&lt;br /&gt;10:45:12 - пришла свечка: 10:45:14&lt;br /&gt;10:45:13 - проверяем сигнал&lt;br /&gt;10:45:13 - Запускаем действие&lt;br /&gt;10:45:14 - проверяем сигнал&lt;br /&gt;10:45:14 - пришла свечка: 10:45:16&lt;br /&gt;10:45:15 - проверяем сигнал&lt;br /&gt;10:45:15 - Запускаем действие&lt;br /&gt;10:45:16 - проверяем сигнал&lt;br /&gt;10:45:17 - пришла свечка: 10:45:18&lt;br /&gt;10:45:17 - проверяем сигнал&lt;br /&gt;10:45:17 - Запускаем действие&lt;br /&gt;10:45:18 - проверяем сигнал&lt;br /&gt;10:45:19 - проверяем сигнал&lt;br /&gt;10:45:20 - пришла свечка: 10:45:20&lt;br /&gt;10:45:20 - пришла свечка: 10:45:22&lt;br /&gt;10:45:20 - проверяем сигнал&lt;br /&gt;10:45:20 - Запускаем действие&lt;br /&gt;10:45:21 - проверяем сигнал&lt;br /&gt;10:45:21 - Запускаем действие&lt;br /&gt;10:45:22 - проверяем сигнал&lt;br /&gt;10:45:23 - пришла свечка: 10:45:24&lt;br /&gt;10:45:23 - проверяем сигнал&lt;br /&gt;10:45:23 - Запускаем действие&lt;br /&gt;10:45:24 - проверяем сигнал&lt;br /&gt;10:45:25 - пришла свечка: 10:45:26&lt;br /&gt;10:45:25 - проверяем сигнал&lt;br /&gt;10:45:25 - Запускаем действие&lt;br /&gt;10:45:26 - проверяем сигнал&lt;br /&gt;10:45:27 - проверяем сигнал&lt;br /&gt;10:45:28 - проверяем сигнал&lt;br /&gt;10:45:29 - проверяем сигнал&lt;br /&gt;10:45:30 - пришла свечка: 10:45:28&lt;br /&gt;10:45:30 - проверяем сигнал&lt;br /&gt;10:45:31 - проверяем сигнал&lt;br /&gt;10:45:31 - пришла свечка: 10:45:32&lt;br /&gt;10:45:32 - проверяем сигнал&lt;br /&gt;10:45:33 - проверяем сигнал&lt;br /&gt;10:45:34 - пришла свечка: 10:45:34&lt;br /&gt;10:45:34 - проверяем сигнал&lt;br /&gt;10:45:35 - проверяем сигнал&lt;br /&gt;10:45:35 - пришла свечка: 10:45:36&lt;br /&gt;10:45:36 - проверяем сигнал&lt;br /&gt;10:45:36 - пришла свечка: 10:45:38&lt;br /&gt;10:45:37 - проверяем сигнал&lt;br /&gt;10:45:37 - Запускаем действие&lt;br /&gt;10:45:38 - проверяем сигнал&lt;br /&gt;10:45:38 - пришла свечка: 10:45:40&lt;br /&gt;10:45:39 - проверяем сигнал&lt;br /&gt;10:45:39 - Запускаем действие&lt;br /&gt;10:45:40 - проверяем сигнал&lt;br /&gt;10:45:41 - пришла свечка: 10:45:42&lt;br /&gt;10:45:41 - проверяем сигнал&lt;br /&gt;10:45:41 - Запускаем действие&lt;br /&gt;10:45:42 - проверяем сигнал&lt;br /&gt;10:45:43 - проверяем сигнал&lt;br /&gt;10:45:44 - пришла свечка: 10:45:44&lt;br /&gt;10:45:44 - проверяем сигнал&lt;br /&gt;10:45:45 - проверяем сигнал&lt;br /&gt;10:45:46 - проверяем сигнал&lt;br /&gt;10:45:47 - проверяем сигнал&lt;br /&gt;10:45:47 - пришла свечка: 10:45:46&lt;br /&gt;10:45:48 - проверяем сигнал&lt;br /&gt;10:45:49 - проверяем сигнал&lt;br /&gt;10:45:50 - пришла свечка: 10:45:50&lt;br /&gt;10:45:50 - проверяем сигнал&lt;br /&gt;10:45:50 - пришла свечка: 10:45:52&lt;br /&gt;10:45:51 - проверяем сигнал&lt;br /&gt;10:45:51 - Запускаем действие&lt;br /&gt;10:45:52 - проверяем сигнал&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>