В C++ есть несколько способов округлить дробное число (float, double) до целого. Сегодня я кратко опишу эти способы и покажу, чем они отличаются друг от друга.
В чем я был неправ относительно std::condition_variable::wait?
std::condition_variable — это объект синхронизации, появившийся в C++11. Он используется, когда Ваш поток должен ожидать какого-либо сигнала от другого потока (например, о готовности данных для их последующей обработки).
Недавно мой коллега указал мне на то, что я неправильно понимаю работу с предикатом pred, который передается вторым параметром в метод std::condition_variable::wait. Он нужен для предотвращения ложного пробуждения потока (spurious wakeup). Интересный нюанс в том, когда он вызывается.
О блоке catch(…)
В С++ есть такая замечательная конструкция catch(...). С её помощью можно перехватить любое брошенное исключение, даже не зная его тип. Очень удобно. Но у такого подхода есть и серьёзный недостаток. Сегодня расскажу какой.
Моя новая книга
В прошлом посту я обещал представить свою новую книгу. Пришло время выложить её на всеобщее обозрение.
Это полностью переработанный вариант книги «Разработка приложений под КОМПАС в Delphi». Фактически я её полностью переписал. И теперь она называется «Разработка приложений под КОМПАС с использованием API интерфейсов версии 5«.
Подробности и ссылка на скачивание приведены здесь Разработка приложений под КОМПАС с использованием API интерфейсов версии 5
Куда я пропал?
С момента моей предыдущей записи в этом блоге прошло почти 4 года. Кто-то возможно решил, что я окончательно забросил блог и свою творческую деятельность. Но это не так.
Продолжить чтение →Соответствие строковых функций
При разработке Windows-приложений часто приходится иметь дело с типом TCHAR. Но строковые функции для работы с ним не на слуху. Их приходится постоянно вспоминать. Для решения этой проблемы я составил таблицу, в которой приведено соответствие строковых функций для типов char, wchar_t и TCHAR. Продолжить чтение →
Крайне необычный способ разыменования итератора
Итераторы занимают важное место в разработке программ на С++. Но многие начинающие программисты совершенно не понимают, как ими пользоваться. И иногда рождают такой код, от которого волосы встают дыбом. Ниже приводится пример такого кода для задачи получения значения, на которое указывает итератор. Продолжить чтение →
Дефицит модульного мышления
Важной проблемой современной системы образования в области программирования является то, что она не способствует развитию модульного мышления. Это относится к статьям, книгам, обучающим видеороликам и др. Продолжить чтение →
Загрузка старого ядра Linux
К несчастью обновления ядра Linux могут приводить к регрессии системы (появлению ошибок). Поэтому полезно уметь загружать систему со старым ядром. Это можно сделать двумя способами: путем ручного выбора нужного ядра из списка при загрузке системы, или путем изменения настроек GRUB. Кратко опишу оба этих способа. Продолжить чтение →
Чем плоха функция PulseEvent
Лично мне нравится функция PulseEvent. Она освобождает и тут же вновь захватывает объект событие. Но, как справедливо отметили в комментариях к одному из моих прошлых постов, компания Microsoft не рекомендует ее к использованию. Вместо нее, начиная с Windows Vista, рекомендуется использовать механизм условных переменных (condition variable). Функция PulseEvent сохранена исключительно в целях обратной совместимости. Но давайте попробуем разобраться, чем она так плоха и можно ли с этим что-то сделать?
