LINUX.ORG.RU

Сообщения Praktik

 

C++, gcc, как заглушить warning'и?

Пишу приложение использующее библиотеки от стороннего поставщика. Заголовочные файлы этих либ генерируют очень много warning'ов во время компиляции, так что даже иногда теряю свои собственные. Можно ли заглушить предупреждения gcc на группу файлов, локализованных в отдельной директории? Конечно идея в том, чтобы не понижать уровень предупреждений компилятора, т.к. хочу их видеть на своём коде.

#pragma GCC system_header похоже на то что нужно, но это придётся модифицировать чужие заголовочные файлы. Есть ли другие способы?

Praktik
()

[Xlib] Как получить верный colormap для XImage?

Приложение на Xlib, в процессе работы формирует картинки в XImage. Возникла необходимость передать их по сети другому приложению (приложение qt'ное). Для этого формирую и отправляю QImage. Но с ним возникла проблема в восьмибитном цвете (этот режим обязательно нужен) -- нужно подставить в QImage правильный colortable, чего мне сделать не удаётся. Я посмотрел в исходники qt, там у QPixmap есть похожая функция -- convertToImage, попытался её скопировать но она цепляет неверную таблицу цветов. Породить QPixmap не могу, т.к. он уже требует присутствия полноценного QPaintDevice, которому нужен QApplication, а т.к. у меня приложение на xlib всё это городить для меня не вариант. Гугл из нормальной информации выдал такой алгоритм:

create an 8bpp QImage; retrieve the entire colormap for the XImage; set the colormap entries of the QImage to the retrieved colormap values for(0 <= y < h, 0 <= x < w) qimg.setPixel(x, y, XGetPixel(ximg, x, y))

Но проблему это не решает, т.к. как именно получить нужный colormap для XImage я не знаю. Я пробовал использовать и DefaultColormap и colormap окна (через XGetWindowAttributes) -- всё равно цвета искажаются (обычно только зелёные передаются более-менее верно). По идее у меня должен использоваться colormap по-умолчанию, т.к. окно создаётся через XCreateSimpleWindow. O'Reilly's Xlib Programming Manual смотрел, гуглил, но пока правильного способа не нашёл. Есть идеи как вытянуть правильные цвета из XImage?

 

Praktik
()

Чудеса производительности

Есть два лаптопа. Первый с вот с таким процессором:

cpu family      : 15
model           : 72
model name      : AMD Turion(tm) 64 X2 Mobile Technology TL-52
stepping        : 2
cpu MHz         : 1607.306
cache size      : 512 KB

Второй с intel:

cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 Duo CPU     T5850  @ 2.16GHz
stepping        : 13
cpu MHz         : 2161.298
cache size      : 2048 KB
На первом (с amd процессором) был установлен lenny, который перенесли на лаптоп с intel (просто копированием). Собрали ядро 2.6.28 на каждую машину под свой процессор. Затем сравнивая производительность компиляции испытали шок. На рабочем проекте (смесь С++ и С, 95% С++), машина с core2duo собирала на 20% медленнее amd. Проверили на сборке emacs23 (C и elisp). Разница увеличилась почти до 40%. Собирали с одинаковыми параметрами конфигурирования, мейку добавляли -j2. Переход на ядро от дистрибутива (2.6.26-1-686), не помог исправить ситуацию. top исправно рапортует, что при компиляции ядра процессора загружены именно процессами компиляции. Каждый замер произвели четыре раза. На обоих машинах обновили дистрибутив из сети. В /var/log/messages ничего подозрительного не обнаружено. На amd 2 гб памяти, на core2duo — 3. На машинах стоит ещё заводская Vista, перегрузили туда. Рейтинг Висты для cpu intel: 5,1; для cpu amd: 4,6. По памяти правда intel проиграл: 4,7 против 5,9. Но думаю это объясняется тем, что у amd 2 гб озу работают в dual channel, и amd имеет встроенный контролер памяти.

Почему так происходит? Предыдущие замеры показывали, что amd справляется с компиляцией медленней лаптопа с coreduo 1,66 и десктопа с 1,86. А тут машина с 2,16 заметно проигрывает.

Praktik
()

Внешняя звуковая плата для ноутбука.

Не нравятся шумы встроенного в лаптоп звука, поэтому подумываю над приобретением внешней звуковухи. Я не аудиофил и основные требования к плате следующие: само собой беспроблемная работа в линукс, музыка, фильмы, невысокая цена (до трёх тысяч рублей). Хочется получить хорошее стерео, без шумов, наводок и т.п. Подключаться буду к колонкам 2.1 или наушникам. В ноутбуке есть следующие интерфейсы: 1. Разъём express card 2. 1394 3. usb. Вот к каким выводам пришёл пошукав в сети:

1.Насколько я понял сейчас существует только одна плата для express card - Creative X-Fi Xtreme Audio Notebook, которая в Линуксе не поддерживается. Упоминаний о работе в Linux найти не удалось, в списке поддерживаемых среди недавно выпущенных бета драйверов её тоже нет. Так ли это, или эти драйвера всё-таки можно на ней запустить? Нет ли других плат? Хотелось бы как раз устройство с express card, чтобы не торчало ничего лишнего из машины.

2.Не удалось найти подходящих по цене устройств на firewire. Всё начинается от 8000, как я понял что-то уровня домашнего использования тут нет. Верно?

3.Больше всего упоминаний про благополучную работу с картами на usb. Тут и M-Audio и Audigy/Extigy/Xmod и Terratec Sound System. Правильно ли я понял, что usb_audio в alsa даёт мне нормальную поддержку любой карты на usb (по крайней мере в стерео режиме)? К примеру в магазине недавно видел SteelSeries Siberia usb (не нравится геймерская направленность, но по цене в самый раз). Ну и т.д. X-Fi Go!, X-Fi Surround, M-Audio Transit всё это будет работать?

Может я что упустил, или может просто можете порекомендовать какую-нибудь модель из своего опыта?

Praktik
()

Как заграбить нажатие клавиши в qt3 (перехватить KeyPress event)?

Хочу активировать окно с моим виджетом по клавише. У меня завязан ряд действий в моём окне по нажатию клавиши на клавиатуре и нужно, чтобы они отрабатывались даже когда фокус у меня в другом окне или даже рабочем столе.

Делал раньше подобное на Xlib, там это решилось так:

XGrabKey(display,36,0,RootWindowdisplay,screen_num),True,GrabModeAsync,GrabMode Async)

После этого KeyPress event как раз приходил нужным образом.

Пишу на qt3. Пробовал следующие решения:

1. QWidget::grabKeyboard () - в своём классе порождённом от QWidget. Не работает. Не приходят сообщения о нажатии клавиши когда нет фокуса в моём окне.

2. XGrabKey(x11AppDisplay(), 36, 0, qt_xrootwin(), True, GrabModeAsync, GrabModeAsync).

И переопределял virtual bool x11Event( XEvent* ); в своём QWidgetm, надеясь, что мне туда упадёт нужный KeyEvent. Но он, не падает ни туда, ни в keyPressEvent( QKeyEvent* ). Поведение довольно страннное. При запуске программы нажатие Enter (это её я в данном случае хочу перехватить) не срабатывает т.е. все нажатия блокируются (нет никакой реакции на нажатие клавиши), но у меня в программе нужные сообщения не появляются. После завершения моей программмы всё становится на свои места - Enter снова работает.

Как можно это реализовать это на qt3? Поискал по исходникам kde, там тоже делают через XGrabKey, но не могу понять почему у меня это не срабатывает.

Praktik
()

RSS подписка на новые темы