Статьи из рубрики «c-cpp» RSS

Советы и программы на C/C++ для разных операционных систем.

Дочерние рубрики:

Отслеживание источника исключения в С++

Обобщённая версия статьи «Отслеживание источника исключения в Qt».

Решение проблемы отлова не пойманного исключения при помощи gdb — задача не из приятных, особенно при отладке многопоточных приложений. К счастью, есть и более простой способ. Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
30
Апр
2012

Совмещение различных конфигураций сборок при использовании qmake

В продолжение темы одновременной сборки взаимно несовместимых конфигураций.

В предыдущей записи было показано, что позволяет собирать одновременно взаимно несовместимые конфигурации, как-то: отладочная и релиз-версия приложения, статическая и динамическая версия библиотеки.

Тем не менее, без лишних телодвижений совместить несколько конфигураций сборок (например, отладочная и релиз-версия статической и динамической библиотеки) проблематично. Далее »

Автор: , опубликовано в: Qt, комментариев: нет
28
Апр
2012

Одновременная сборка статической и динамической библиотеки с qmake

Задача: заставить генерировать статическую и динамическую библиотеку при использовании шаблона сборки lib. Далее »

Автор: , опубликовано в: Qt, комментариев: 1
22
Апр
2012

Отслеживание источника исключения в 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

Далее »

Автор: , опубликовано в: Qt, комментариев: 1
13
Апр
2012

Undefined reference на специализацию шаблона статического поля

Столкнулся на работе с такой проблемой при написании расширения для QtScript: код вида Далее »

Автор: , опубликовано в: C/C++, комментариев: 2
31
Мар
2012

Qt, libfcgi и многопоточность

Для создания приложений на есть библиотека libfcgi. Не буду вдаваться в дискуссию, зачем нужны приложения FastCGI на C/C++/подставить нужный язык, когда Python/PHP/Perl/подставить нужное гораздо удобнее. Отмечу лишь, что по работе понадобилось написать FastCGI-приложение на (в основном из-за наличия нескольких высокопроизводительных библиотек, написанных на , но не суть).

Строго говоря, libfcgi, хотя и является официальной библиотекой от создателей протокола, не лучший вариант для поддержки FastCGI — API, предоставляемое библиотекой, сильно ограничено (в плане функциональности) и недостаточно гибко. Далее »

Автор: , опубликовано в: Qt, комментариев: 3
8
Янв
2012

HTML Parser для Qt

 — это, конечно, хорошо, но очень часто требуется разбирать документы , которые могут и не быть валидными.

В есть множество классов для работы с XML, но они не подходят для HTML, так как ошибки в HTML для них фатальны.

Ниже приведён вариант парсера для HTML, основанный на библиотеке libxml2. Далее »

Автор: , опубликовано в: Qt, комментариев: 5
7
Сен
2011

OpenMP, параллельный режим и утечки памяти в GNU Standard C++ Library

Стандартнуя библиотека GNU языка C++ поддерживает так называемый параллельный режим, который предоставляет экспериментальную поддержку параллельных алгоритмов из <algorithm> и <numeric>. Для включения данного режима исходный код нужно компилировать с опеределённым макросом _GLIBCXX_PARALLEL, либо явно подключать заголовочные файлы из <parallel/> и использовать пространство имён __gnu_parallel.

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

Как оказалось, при использовании в своей программе OpenMP и параллельного режима libstdc++ можно столкнуться с очень неприятными и недокументированными особенностями реализации и получить незабываемое «удовольствие» при отладке. Далее »

Автор: , опубликовано в: C/C++, комментариев: 2
14
Май
2011

k-путевое слияние на C++

Алгоритмы слияния — семейство алгоритмов, последовательно обрабатывающие отсортированные списки и генерирующие один или более отсортированных списков на выходе. Слияние используется в алгоритме сортировки слиянием (например, функция bitonic_merge() в алгоритме битонной сортировки).

k-путевое слияние использует k отсортированных списков; в данном примере генерируется один выходной список, размер которого равен размеру всех входных списков.

k-путевое слияние может быть очень эффективно при сортировке очень больших объёмов данных: большой исходный файл разбивается на несколько файлов меньшего размера, каждый из которых можно отсортировать в оперативной памяти; после сортировки получается n отсортированных файлов. Над отсортированными файлами выполняется многопутевого слияния (возможно, в несколько этапов), на выходе получается отсортированный исходный файл.

Как сортировку, так и слияние можно выполнять параллельно (например, при использовании быстрой сортировки можно использовать конструкцию task из  3.0; слияния же можно проводить в несколько потоков потоков — например, 100 файлов можно отсортировать в 4 потока, используя 25-путевое слияние — правда, это создаст дополнительную нагрузку на диск). Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
6
Май
2011

Bitonic Mergesort на C++

Битонная слиянием (bitonic mergesort) — параллельный алгоритм сортировки, рекурсивно разделяющий входную последовательность на сортированные последовательности меньшего размера.

Алгоритм битонной сортировки может выполняться параллельно, потому что каждая операция разделения независима от всех других операций.
Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
16
Апр
2011