" title="Написать письмо">Написать письмо
Донаты на карту ВТБ:
2200 4002 2461 6363

Статистика

Пользователи : 1
Статьи : 2190
Просмотры материалов : 8179572
 
Qt: Broken Pipe (18.06.2025). Печать E-mail
2025 - Июнь
18.06.2025 00:00
Save & Share
Кодишь-кодишь в Qt v.5.3 на Astra SE v.1.4, никого не трогаешь. Создаешь PDF через QPrinter.

Вдруг, при работе программа останавливается и орёт: "Broken Pipe!". При этом, если продолжить работу исходников, - PDF создаётся корректно - вообще вся программа работает корректно - вообще всё работает корректно.

Причина возникновения ошибки, условия её выполнения - также неизвестны; то всплывает, то не всплывает. И вплывает она только в режиме дебага - для клиента не покажется никогда. Выбешивала просто невероятно - её убийство стало делом принципа, оказалось относительно простым.


Чтобы убрать это досадное недоразумение, подключается signal.h и пишется именно 4 строчки (а не 1 или 3, предлагаемые интернетом):

sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGPIPE);
qDebug() << "formular_xxx: vPrint_PDF: результат блокировки сигнала Broken Pipe - " << pthread_sigmask(SIG_BLOCK, &set, NULL); //0 - блокировка выполнена. Результат выполнения блокировки, а не проверка выставленной блокировки.

А вот проверка блокировки сигнала (проверка работоспособности исходников выше) - проблема не только потому, что ошибка всплывает рэндомно и именно при дебаге. Если вдруг блокировка не сработала, и вызвать Broken Pipe принудительно, - это будет форменным мазохизмом при работе. Поэтому, результат блокировки проверялся на другом ПК и с другим сигналом SIGTERM. Если в системном мониторе сделать попытку закрытия приложения путём завершения (Ctrl+T) - при блокированном SIGTERM системный монитор тупо не прервёт именно это конкретное приложение.
Обновлено ( 18.06.2025 12:13 )
 
 

Последние новости


©2008-2025. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru