sleep() в C


Многие знают, что sleep() обладает плохой точностью. Многие так же знают, что sleep(), как и любой блокирующий системный вызов нужно вызывать в цикле, так как он попросту может не выждать требуемое от него количество времени.
Но в таком случае, после обработки сигнала, когда управляющий поток вернётся в место, где его прервали, sleep() будет вызван с теми же параметрами, что и первый раз.

Возможно, Вы думаете, что можно положиться на то, что sleep() возвращает время, которое ему нужно "доспать" и просто итерировать цикл, до тех пор, пока возвращаемое значение не будет равно 0. Давайте обратимся к документации библиотеки libc.
Читать дальше

pthread_cancel() и C++


С приходом в нашу жизнь реализации Linux тредов NPTL, стало доступно досрочное завершение тредов. Представьте себе ситуацию, когда у Вас есть треды с блокирующими системными вызовами или просто треды, использующие sleep() (что ещё хуже) и Вам вдруг понадобилось их завершить. В случае, если Вы программируете на С, скорей всего проблем не будет. Грабли начинают когда Вы решаете сделать тоже самое в C++.

Конечно, с ходу можно посоветывать переписать код и использовать неблокирующие системные вызовы в бесконечном цикле, с условием итерирования. А sleep() заменить на nanosleep() с обработкой EINTR. Но всегда есть абстрактная ситуация в вакууме, когда есть рабочий код и Вам придётся разбираться почему он падает после Ваших изменений.

Кроме того, принудительное завершение треда, может избавить Вас от необходимости контроля начавшейся итерации цикла, или даже, в теории отменить уже запущенный системный вызов, который использует переход в режим ядра (kernel mode).
Читать дальше

Создать загрузучную USB-флешку из Linux среды


Для Linux существует несколько проектов, позволяющих создавать загрузочные USB носители из ISO образа с Windows. Это и кроссплатформенный UNetbootin и WinUSB, который судя по всему больше не поддерживается автором.
Однако, я скачивал Windows 10 с торрентов и записанные флешки на отрез отказывались грузиться :-(
Дело то ли в специфике русского Windows, скаченного в торрентов, то ли в ошибках, которые хором повторяют эти программы. К счастью, у нас есть Grub, который грузит всё и всегда.
В этой статье я постараюсь кратко изложить, что нужно сделать, чтобы Ваш ISO образ попал на USB носитель и при этом с него можно было бы грузиться.
Читать дальше

Файл менеджер для директорий в Gigolo на Kubuntu 14.04


Ранее писал о том, как объяснить Gigolo как работать с различными типами файлов. Это сильно помогало, в случае, если эта полезная программа работала в чужеродной среде, отличной от XFCE4 или Gnome. Последнее обновление Kubuntu принесло новой пищи для размышлений. Описанный способ не работает, gfvs-open теперь не слушается текстового файла defaults.list. Однако, решение нашлось.
Читать дальше

Идеальные CFLAGS в Gentoo


С 4й версии GCC умеет подбирать оптимальные параметры автоматически, для этого нужно всего лишь указать в CFLAGS ключ -march=native. Однако, бывают случаи, когда -march=native использовать нельзя, например, если у вас distcc (proof) Вот здесь начинается особая, уличная магия. Первое, что нужно сделать - узнать свою модель процессора. Сделать это можно при помощи команды:
Читать дальше

Qt5: скопировать после сборки файлы в build directory


Qt5 создаёт build directory рядом с source directory.
Если Ваш проект считывает какие-либо файлы после запуска программы - их нужно положить в соответствующие директории.
Qmake позволяет сделать это кроссплатформенно, создав цели для make install.

Итак, в файле проекта *.pro добавьте такие строки:
Читать дальше

Настройка Eclipse для работы с cmake проектами


В отличии от NetBeans, где достаточно всего лишь создать проект из существующего Makefile, Eclipse требует некоторой настройки.
В этой статье я подробно разберу настройку отладчика и компилятора.



Предположим, что у вас есть такой, вполне обычный CMakeLists.txt.

Читать дальше

Gigolo: ассоциации файлов


Gigolo - это графический и консольный интерфейс для подключения к локальным и удалённым файловым системам, использующий GIO/GVfs. С его помощью вы можете быстро и просто подсоединить или смонтировать практически любую файловую систему, если её поддержка есть в вашей системе. Для частого использования предусмотрены закладки.



Бывает так, что из коробки Gigolo отказывается открывать смонтированные директории. Лечится это правкой файла defaults.list.


Читать дальше