Доброе время суток! Я занимаюсь разработкой MMORPG. В игре асинхронной загрузкой файлов занимается файловая система встроенная в движок, остальная логика обрабатывалась в основном потоке. Но помимо загрузки файлов есть и другие тяжеловесные операции, например инициализация персонажа, которая включает в себя распарсивание XML данных, композиция текстур и т.д. И я столкнулся с необходимостью разгрузить основной поток игры для повышения fps.
Вооружившись гуглом и прочитав несколько последних статей на Хабре о потоках, решил попробовать свои силы и написать свой велосипед ThreadPool. Основной моей целью было написать простой в использовании и расширяемый пул потоков, с возможностью асинхронного вызова функций с любым количеством аргументов и получения возвращаемого значения. Предлагаемые на Хабре решения меня не устроили в силу многих проблем, от которых я постарался избавиться в своем решении – использовать минимум шаблонной магии и отказаться от абстрактных классов и наследования. Я хочу поделиться своим опытом с вами.
Рубрика «c++» - 223
Пишем простой ThreadPool с async и future
2013-07-29 в 18:04, admin, рубрики: asynchronous, c++, threads, Программирование, с++11, метки: asynchronous, threads, Программирование, с++11 PEB — структура процесса в windows, заполняется загрузчиком на этапе создания процесса, которая содержит информацию о окружении, загруженных модулях (LDR_DATA), базовой информации по текущему модулю и другие критичные данные необходимые для функционирования процесса. Многие системные api windows, получающие информацию о модулях (библиотеках) в процессе, вызывают ReadProcessMemory для считывания информации из PEB нужного процесса.
Читать полностью »
STL для новичков. Реализация класса-контейнера
2013-07-18 в 10:00, admin, рубрики: c++, STL containers, Песочница, метки: c++, STL containersПривет Хабр, наверное все, кто изучает С++ хотят разобраться как реализованы и как работают классы-контейнеры из стандартной библиотеки. Как по мне, чтобы лучше освоить нечто похожее на контейнеры, то надо попробовать реализовать один из контейнеров самому. В этой статье я хочу показать вам хотя бы примерно как реализуются классы-контейнеры на примере списка. Хочу сразу сказать, что это не будет копирование всего функционала, а будет показана только концепция работы контейнера, а именно реализуем класс списка и класс литератора для работы с ним.
Статья будет интересна только новичкам, которые начинают изучать стандартную библиотеку, профессионалы не найдут здесь для себя ничего новго.
Читать полностью »
Пишем свой системный монитор (Linux)
2013-07-17 в 17:24, admin, рубрики: c++, linux, qt4, метки: c++, qt4В этой статье я опишу процесс создания собственного системного монитора. Данный системный монитор показывает:
- Hostname
- Имя пользователя
- Uptime
- Имя модели процессора
- Частоту процессора
- Загрузку процессора
- Количество оперативной памяти
- Количество используемой оперативной памяти без кэшируемых данных
- Запущенные процессы
C++: Когда время жизни объекта определяется временем жизни ссылки на него
2013-07-16 в 8:12, admin, рубрики: c++, ненормальное программирование, Песочница, метки: c++ В то время пока выходят статьи о сущности и подводных камнях r-value ссылок (пример со ссылками на полезные источники habrahabr.ru/post/157961/) подозреваю, что довольно многие не знают особенности обычных l-value ссылок. Суть этой статьи показать пример, когда время жизни объекта определяется временем жизни l-value ссылки на него, и как это можно использовать. Если заинтересовало, то добро пожаловать. Кстати, зная как можно больше особенностей про l-value ссылки, будет проще понять r-value.
Читать полностью »
Не зная брода, не лезь в воду. Часть N4
2013-07-15 в 10:58, admin, рубрики: c++, Блог компании PVS-Studio, метки: c++, Си В этот раз я хочу поговорить о виртуальном наследовании в языке Си++, и почему его следует использовать очень осторожно. Предыдущие статьи: часть N1, N2, N3.
Статья написана по мотивам заметки "Грабли 2: Виртуальное наследование". Статья хорошая, но, на мой взгляд, несколько размыта, и новичок может не до конца уловить суть опасностей. Я решил предложить свой вариант описания проблем связанных с виртуальным наследованиям.
Читать полностью »
MySQL клиент формата A4
2013-07-15 в 9:09, admin, рубрики: c++, IOCCC, mysql, метки: c++, IOCCC, mysqlМожно ли уместить исходники MySQL клиента на 1 страничке формата A4? Оказывается, если 8 кеглем (в принципе читаемо) и после обфускации, то можно! А если читаемо, без обфускации и 10 кеглем, то нельзя: надо целых 6 страничек.
В ходе работы над всяким у меня тут случайно получился крохотный, но работающий MySQL клиент размером чуть больще 1000 строк. Стало интересно, насколько компактнее можно сделать. Потратил половину воскресенья, изолировал и минимизировал код. В результате появился nanomysql, CLI клиент для MySQL, полные исходники которого занимают чуть менее 380 строк, менее 1800 токенов и примерно 10500 байт, и при этом компилируются и работают под Linux, Window, MacOS. Написано на C++ с абсолютным минимумом STL.
Скриншоты, циферки и прочие подробности уикэнд-сумасшествия по изготовлению наноклиента под катом.
Читать полностью »
Делегат на С++11
2013-07-11 в 17:48, admin, рубрики: c++, c++11, tutorial, Песочница, метки: c++11, tutorial, оопВсем привет!
Писал когда-то статью, почти такую же (Делегат на С++).
После этого, начал изучать новые технологии (в частности С++11), где мне понравилась новая возможность, которая называется «Variadic Templates». В общем, изучение и использование новых возможностей этого языка и побудило меня к написанию этой статьи.
Читать полностью »
Совсем недавно озадачился защитой приложений от перехвата системных api, решил поделится и обсудить то, к чему пришел. Многие из вас знают, что перехват системных api сводится к перенаправлению оригинальной функции в нужное место, благодаря этому можно модифицировать параметры функции, возвращать результат отличный от оригинала, хранить оригинальный вызов с параметрами и многое другое. Так как это теоретическая часть, примеры в статье будут сопровождаться псевдокодом.
Читать полностью »
Не бойтесь велосипедов. Или еще один Grand Central Dispatch (GCD) на C++11
2013-07-10 в 17:59, admin, рубрики: c++, c++11, GCD, велосипед на ракетном топливе, велосипедостроение, велосипеды, параллельное программирование, Программирование, метки: c++11, GCD, велосипед на ракетном топливе, велосипедостроение, велосипеды, параллельное программированиеИМХО (Имею Мнение Хрен Оспоришь)
С моей точки зрения самое полезное, что может сделать программист для повышения своего профессионального уровня — это написание велосипедов. Велосипедостроение — очень увлекательный процесс. Иногда он увлекает больше, чем задача, ради которой сам велосипед и затевался. При написании велосипеда (под велосипедом я понимаю реализацию уже существующего) происходит более глубокое понимание уже существующих решений и техник.
Читать полностью »