Метка «c++» - 77

О том, что такое двойная буферизация много написано здесь и здесь.

Здесь можно почитать, как реализуется ДБ на Java.

Я расскажу, как реализуется двойная буферизация на C#. Многое из того, что здесь написал можно прочитать в MSDN, но без деталей реализации.

Ручное управление двойной буферизацией (далее ДБ)

Для ручного управления двойной буферизацией, .NET Framework предоставляет следующие 3 класса:

  • BufferedGraphics – обеспечивает буфер для временного хранения графики и средства вывода её на полотно контрола.
  • BufferedGraphicsContext — обеспечивает создание нового объекта BufferedGraphics на основе объекта Graphics;
  • BufferedGraphicsManager – предоставляет дефолтный BufferedGraphicsContext.

Читать полностью »

Одним из наиболее заметных дополнений в C# 4 является dynamic. Об этом рассказано много и не раз. Но всегда выпускается из виду DLR (Dynamic language Runtime). В данной статье мы рассмотрим внутреннее устройство DLR, работу самого компилятора, а также дадим определение понятиям статически-, динамически- типизированный язык со слабой и сильной типизациями. И, конечно же, не останется без внимания техника PIC (Polymorphic Inline Cache), используемая, например, в Google V8 engine.
Читать полностью »

При разработке бизнес-приложений постоянно стоит проблема хранения данных в репозитории совместно с проектом. Особенно эта тема актуальна для корпоративных ERP, CRM, многабукав и так далее систем.
Для чего это нужно:

  • Для целей тестирования
  • Для совместной разработки
  • Для каких-то программных алгоритмов, оперирующих этими данными

Также, не менее остро стоит проблема надежного обновления данных на рабочем проекте, совместно с обновлением модели.
В нашей системе мы применили подход, который позволяет контролировать целостность данных, их загрузку и обновление, хранит данные в репозитории и при этом работает быстро и надежно.
Читать полностью »

При разработке бизнес-приложений постоянно стоит проблема хранения данных в репозитории совместно с проектом. Особенно эта тема актуальна для корпоративных ERP, CRM, многабукав и так далее систем.
Для чего это нужно:

  • Для целей тестирования
  • Для совместной разработки
  • Для каких-то программных алгоритмов, оперирующих этими данными

Также, не менее остро стоит проблема надежного обновления данных на рабочем проекте, совместно с обновлением модели.
В нашей системе мы применили подход, который позволяет контролировать целостность данных, их загрузку и обновление, хранит данные в репозитории и при этом работает быстро и надежно.
Читать полностью »

Инициализаторы объектов (Object Initializers) – это полезная возможность языка C#, которая позволяет инициализировать необходимые свойства объекта прямо во время его создания. Поскольку синтаксически эта «фича» очень близка к инициализации объекта с передачей параметров через конструктор, многие разработчики начинают забивать на принципы ООП (в частности на понятие инварианта) и использовать ее, где только можно.

Но даже если не переходить к холиварам и малопонятным терминам, давайте рассмотрим небольшой пример, и подумаем над тем, может ли он привести к проблемам или нет:

// position передается извне или настраиватся каким-то образом
long position = -1;
using (var file = new FileStream("d:\1.txt", FileMode.Append)
                        {
                            // Мы точно знаем, что нужные данные расположены
                            // с некоторым сдвигом!
                            Position = position
                        })
{
    // Делаем чего-то с файлом
}

В данном фрагменте внутри директивы using создается ресурс (файл) и устанавливается одно из его свойств (Position) с помощью инициализатора объекта. При этом самое главное в этом коде то, что setter этого свойства может генерировать исключение.
Читать полностью »

Донбасс Арена на рабочем столе

В преддверии Евро 2012 решил написать программу, устанавливающую на рабочий стол изображение из веб-камер Донбасс Арены.
Читать полностью »

Здравствуй уважаемыйин!

Это мой дебют на Хабре!

Я достаточно долгое время читаю статьи с хабра мне они все нравятся. Но вот в чем загвоздка, я сам захотел попробовать что то свое сделать, так сказать сделать свой вклад в развитие данного проекта, хотя мой вклад будет достаточно мал и ничтожный.

Предусловие

Я хотел бы показать, рассказать более простым языком новичкам о GUI-приложениях на WinAPI.
GUI — (Graphic User Interfrace) графический пользовательский интерфрейс.
Для новичков это будет может более понятно, тем листать мануалы по WinAPI. Для более опытных программистов С++, моя статья
не содержит никакой полезной и интересной информации, так что смело можете давить Alt + Left, если нет тогда читаем до конца
Чтобы писать GUI-приложения нужно иметь хоть малейшее представление что такое GUI.
Читать полностью »

image
Продумывая архитектуру очередного класса вы понимаете, что вам очень бы пригодилась возможность передать в качестве аргумента кусок исполняемого кода. Это позволило бы вам избежать веретеницы if-ов и case-ов и сделало бы ваш код более элегантным Девушки восхищенно бы охали и непременно оставляли бы вам свой телефончик в комментах. Кхм… что-то я увлекся.

Итак как это делается в C#? Например вы пишете калькулятор и у вас есть простейшая логика:

public double PerformOperation(string op, double x, double y)
{
	switch (op)
	{
		case "+": return x + y;
		case "-": return x - y;
		case "*": return x * y;
		case "/": return x / y;
		default: throw new ArgumentException(string.Format("Operation {0} is invalid", op), "op");
	}
}

Это простое и изящное решение имеет право на жизнь, но у него есть некоторые проблемы:

  • Софт изменчив. Завтра вам понадобится добавить взятие по модулю и тогда придется перекомпилировать класс. На определенных стадиях проекта это недешевое удовольствие для потребителей вашего класса.
  • Код в текущем виде не имеет никаких проверок входных данных. Если их добавить, то switch неприлично разрастется.

Читать полностью »

Программы в автоматном стиле – трудности перевода

Пятая лекция курса «Сетевое программирование в UNIX» от специалистов SkyDNS и компании «Айдеко» уже ждет своих слушателей.

Александр Патраков объясняет, как перевести обычную сетевую программу в программу, основанную на конечном автомате.

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

Мы с Vass записали и выложили четвертую серию подкаста «Заметки о Qt».
Подкаст «Заметки о Qt» s01e04
Сам подкаст на rpod.ru — qt-notes.rpod.ru/275603.html
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js