Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Использование DDE в C# (платный раздел) arrow Использование DDE в C#. Урок 5. Пишем простейший DDE-сервер.
25.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Использование DDE в C#. Урок 5. Пишем простейший DDE-сервер. Печать E-mail
Автор megabax   
17.11.2013 г.
New Page 1

Использование DDE в C#. Урок 5. Пишем простейший DDE-сервер.

Что бы смотреть урок полностью, а так же скачать исходники к уроку, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Исходники программы можно скачать в платном разделе..

И так, мы уже достаточно покопались в прилагаемом к NDDE примере, что бы разобраться как работать с данной библиотекой. Теперь мы можем разработать собственный DDE сервер и клиента к нему. Вот сегодня мы этим и займемся. Наш DDE сервер будет хранилищем неких условных ресурсов, которые могут зарезервировать клиенты. Что это могут быть за ресурсы? Ну, например, предположим, у нас есть биржевой робот. Он торгует согласно определенной стратегии, которая оцифрована и формализована. И вот робот совершает сделку. Но в реальности сделка может быть и не совершена. По какой причине? Ну, например, на некоторое время упал канал связи с интернетом и заявка не дошла до биржи. Или объем сделки был слишком большой, что не нашлось достаточно встречных заявок и сделка выполнилась не полностью. Таким образом, роботу нужна некая обратная связь от биржи, что бы узнать, так ли все происходить как надо. А как это определить? Один из способов: посмотреть баланс, сколько всего у нас акций. Если было, допустим, 10 акций, мы покупаем еще 10, то должно стать 20. Если стало только 19, то значит, что то пошло не так и нам надо докупить еще одну. Но как быть, если у нас два робота торгуют одним и тем же инструментом, и оба используют такую систему контроля? Очевидно, что они будут друг другу мешать. Но выход есть. Можно сделать так, что робот будет резервировать те акции, которые он купил. А другой робот будет считать их внешним портфелем и вычитать из общего количества. Как это будет выглядеть на практике? Допустим, у первого робота, согласно учету, должно быть 5 акций, у второго 10. На балансе 15 акций. Первый робот смотрит, на видит что акций 15. Но он еще и делает запрос специальному серверу, который выдает, что 10 акций зарезервировано. Он их вычитает и остается 5, что и должно быть. Второй видит резерв первого робота 5, вычитает и видит число 10. Тоже все верно. А теперь представим, что акций стало 14. Первый робот проверяет баланс, и видит, что на балансе 4 свободный акции. Докупает одну и считает, что все нормально. Второй робот при очередной проверке тоже посчитает, что все идет по плану. А что бы избежать такой ситуации, когда роботы пытаются корректировать остаток одновременно, нужно просто сделать так, что бы при запросе баланса и проверке робот блокировал данный ресурс от других роботов, а когда закончил транзакцию - отпускал его.

И так, начнем программировать...

...

... На самом деле  Reservator - это не структура, а класс, который мы будет использовать как структуру:

    /// <summary>

    /// Клиент, зарезервировавший ресурс

    /// </summary>

    public class Reservator

    {

        /// <summary>

        /// Идентификатор клиента, зарезервировавшего ресурс

        /// </summary>

        public IntPtr handle;

 

        /// <summary>

        /// Количество зарезервированного ресурса

        /// </summary>

        public int count;

    }

...

Теперь займемся клиентом. Создаем новый проект, подключаем к нему библиотеку NDDE, рисуем интерфейс*:

Использование DDE в C#. Урок 5. Пишем простейший DDE-сервер.

Поля ввода у меня названы tbName и tbCount, а кнопочки btnConnect, btnReserve и btnQuery. Вы можете назвать по другому, но тогда и текст программы у вас тоже будет другой, с соответствующими именами переменной. С такими именами полный текст клиента будет таким...

...


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. 


Последнее обновление ( 17.11.2013 г. )
 
Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги