Статьи из рубрики «c-cpp»
Советы и программы на C/C++ для разных операционных систем.
- Qt (6)
Отслеживание источника исключения в С++
Обобщённая версия статьи «Отслеживание источника исключения в Qt».
Решение проблемы отлова не пойманного исключения при помощи gdb — задача не из приятных, особенно при отладке многопоточных приложений. К счастью, есть и более простой способ. Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: 1Апр
2012
Совмещение различных конфигураций сборок при использовании qmake
В продолжение темы одновременной сборки взаимно несовместимых конфигураций.
В предыдущей записи было показано, что qmake позволяет собирать одновременно взаимно несовместимые конфигурации, как-то: отладочная и релиз-версия приложения, статическая и динамическая версия библиотеки.
Тем не менее, без лишних телодвижений совместить несколько конфигураций сборок (например, отладочная и релиз-версия статической и динамической библиотеки) проблематично. Далее »
Автор: Wandering Soul, опубликовано в: Qt, комментариев: нетАпр
2012
Одновременная сборка статической и динамической библиотеки с qmake
Задача: заставить qmake генерировать статическую и динамическую библиотеку при использовании шаблона сборки lib. Далее »
Апр
2012
Отслеживание источника исключения в Qt
Если приложение (или сама библиотека Qt) бросает исключение, которое не обрабатывается приложением, исключение попадает в цикл обработки событий Qt (известный как event loop), который выводит сообщение наподобие:
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.
При использовании libstdc++ может быть выдана дополнительная диагностика:
terminate called after throwing an instance of ‘std::bad_alloc’
what(): std::bad_alloc
Далее »
Апр
2012
Undefined reference на специализацию шаблона статического поля
Столкнулся на работе с такой проблемой при написании расширения для QtScript: код вида Далее »
Автор: Wandering Soul, опубликовано в: C/C++, комментариев: 2Мар
2012
Qt, libfcgi и многопоточность
Для создания приложений FastCGI на C/C++ есть библиотека libfcgi. Не буду вдаваться в дискуссию, зачем нужны приложения FastCGI на C/C++/подставить нужный язык, когда Python/PHP/Perl/подставить нужное гораздо удобнее. Отмечу лишь, что по работе понадобилось написать FastCGI-приложение на Qt (в основном из-за наличия нескольких высокопроизводительных библиотек, написанных на Qt, но не суть).
Строго говоря, libfcgi, хотя и является официальной библиотекой от создателей протокола, не лучший вариант для поддержки FastCGI — API, предоставляемое библиотекой, сильно ограничено (в плане функциональности) и недостаточно гибко. Далее »
Автор: Vladimir, опубликовано в: Qt, комментариев: 3Янв
2012
HTML Parser для Qt
XML — это, конечно, хорошо, но очень часто требуется разбирать документы HTML, которые могут и не быть валидными.
В Qt есть множество классов для работы с XML, но они не подходят для HTML, так как ошибки в HTML для них фатальны.
Ниже приведён вариант парсера для HTML, основанный на библиотеке libxml2. Далее »
Автор: Vladimir, опубликовано в: Qt, комментариев: 5Сен
2011
OpenMP, параллельный режим и утечки памяти в GNU Standard C++ Library
Стандартнуя библиотека GNU языка C++ поддерживает так называемый параллельный режим, который предоставляет экспериментальную поддержку параллельных алгоритмов из <algorithm> и <numeric>. Для включения данного режима исходный код нужно компилировать с опеределённым макросом _GLIBCXX_PARALLEL, либо явно подключать заголовочные файлы из <parallel/> и использовать пространство имён __gnu_parallel.
В параллельном режиме для реализации параллелизма используется OpenMP.
Как оказалось, при использовании в своей программе OpenMP и параллельного режима libstdc++ можно столкнуться с очень неприятными и недокументированными особенностями реализации и получить незабываемое «удовольствие» при отладке. Далее »
Май
2011
k-путевое слияние на C++
Алгоритмы слияния — семейство алгоритмов, последовательно обрабатывающие отсортированные списки и генерирующие один или более отсортированных списков на выходе. Слияние используется в алгоритме сортировки слиянием (например, функция bitonic_merge() в алгоритме битонной сортировки).
k-путевое слияние использует k отсортированных списков; в данном примере генерируется один выходной список, размер которого равен размеру всех входных списков.
k-путевое слияние может быть очень эффективно при сортировке очень больших объёмов данных: большой исходный файл разбивается на несколько файлов меньшего размера, каждый из которых можно отсортировать в оперативной памяти; после сортировки получается n отсортированных файлов. Над отсортированными файлами выполняется сортировка многопутевого слияния (возможно, в несколько этапов), на выходе получается отсортированный исходный файл.
Как сортировку, так и слияние можно выполнять параллельно (например, при использовании быстрой сортировки можно использовать конструкцию task из OpenMP 3.0; слияния же можно проводить в несколько потоков потоков — например, 100 файлов можно отсортировать в 4 потока, используя 25-путевое слияние — правда, это создаст дополнительную нагрузку на диск). Далее »
Май
2011
Bitonic Mergesort на C++
Битонная сортировка слиянием (bitonic mergesort) — параллельный алгоритм сортировки, рекурсивно разделяющий входную последовательность на сортированные последовательности меньшего размера.
Алгоритм битонной сортировки может выполняться параллельно, потому что каждая операция разделения независима от всех других операций.
Далее »
Апр
2011
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.

