Russian Qt Forum
Апрель 29, 2024, 17:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 719 720 [721] 722 723 ... 761
10801  Qt / Общие вопросы / Re: Трудоемкие задачи (прервать или продолжить). Как прервать? : Декабрь 12, 2009, 14:23
Вроде функцию подогнал под читабельность. Кто может как улучшить код? Грустный
1) Уберите ВСЕ вызовы processEvents - везде. Посмотрите и подумайте зачем нужен UPDATE_STEP

2) Не создавайте избыточного кода методом copy/paste. Попробуйте так
Код
C++ (Qt)
bool Spreadsheet::is_item_in_list_selection_range(const QList<QTableWidgetSelectionRange>& range, int row_, int column)
{
for(int i = 0 ; i < range.size(); i++) {
if (row_ < range[i].topRow()) continue;
if (row_ > range[i].bottomRow()) continue;
if (column < range[i].leftColumn()) continue;
if (column > range[i].rightColumn()) continue;
return true;
}
return false;
}
10802  Qt / Общие вопросы / Re: Трудоемкие задачи (прервать или продолжить). Как прервать? : Декабрь 12, 2009, 01:20
Кто может помогите?
Я не "придираюсь" но с таким текстом как у Вас желание помочь быстро пропадает. Отрихтуйте, почистите

Код:
if (UpdateProgress(progress, i)) return false;	
Неудачное название если ф-ция возвращает false

- processEvents ест время ничего не делает (поскольку UpdateProgess это решает)

 "== true" выглядит не очень естественно
 
- текст должен выглядеть ровно (а не как бык поссал)
 
- возможно что тормоза в is_item_in_list_selection_range, покажите ее тоже

Вот когда все подправите - тогда и поговорим.
10803  Компиляторы и платформы / Компиляторы / Re: Как избавиться от импорта msvcrt.dll на MinGW? : Декабрь 11, 2009, 22:54
.lib-файлы и .a-файлы все это статические библиотеки. Просто ".lib" - стандартное виндозное расширение для них
Например, у Вас на Вындоуз MSVC подключена kernel32.lib - так что, весь код kernel у Вас статически в exe файле? Улыбающийся А если посмотреть тот же lib файл то можно увидеть имена dll файлов. Простота и ясность (как Вы хотели) не есть стиль Микрософт:)
10804  Компиляторы и платформы / Компиляторы / Re: gcc 4.4 (XCode) : Декабрь 11, 2009, 14:51
Покажите лог сборки целиком.
Вот http://www.2shared.com/file/9896917/f2f65a59/Logs.html
10805  Qt / Общие вопросы / Re: Параллельные вычисления (проблемы) : Декабрь 11, 2009, 14:02
Из описания правильно.
Допустим. У вас 4 ядра, и 4 рабочих нитки.
1. скажите, рабочие нитки загружены на 100 процентов?
2. сколько раз(за время своей жизни), в сумме, происходит блокировка разделяемого ресурса нитками?
1) Увы, совсем не на 100% (принимаем 100% = все 4 загружены до упора). Типичная загрузка только 65-70%, а очень хотелось бы большего. Остальное idle, а когда N неудачно -  появляется довольно мощный overhead (монитор показывает его как "system" красным).

2) Блокировки конечно есть для I/O и.т.п. Но в тестах реально работает только одна - для выборки ниткой следующей пачки задач из очереди. Реализация QSpinLockLock/QSpinLockUnlock (это OSX аналог QAtomicInt).

Тесты показывают что "львиная доля" тратится на подъем/усыпление рабочих ниток на семафорах. Не вижу возможности сделать 1 семафор для всех ниток (получается каждая должна иметь свой) да и неясно помогло бы это - ведь усыпление все равно будет.
10806  Qt / Пользовательский интерфейс (GUI) / Re: Сигнал "что-то изменилось". Как вместо 10 сигналов сделать 1? : Декабрь 11, 2009, 13:44
Хочется избавиться от утомительного анализа "а не было ли сначала др. сигнала (старшего)?" Разбить функционал tools_update на части можно, но проблема остается. Я бы сначала в tools_update прикинул  не является ли действие холостым, т.е. уже выполнено предыдущими действиями (хранил бы какие-то "текущие" данные и сравнивал их с пришедшими). Если совпадают - не лезть к диску, не обновлять UI а просто выйти.  Вообще чем занимается tools_update?
10807  Qt / Общие вопросы / Re: Параллельные вычисления (проблемы) : Декабрь 11, 2009, 08:31
Если это так, и принцип делегирования реализован !правильно!, то самое время подумать над кластером.
Про делегирование ничего не слышал Улыбающийся Главная нитка помещает задачи в очередь. Как только в очереди окажется N (размер кластера) задач - все рабочие нитки снимаются со своих семафоров и начинают брать задачи из очереди (также кластером из N задач). N в моих руках, управляемо. Послав все задачи, главная нитка засыпает на семафоре но перед этим досылает еще по одной "псевдо-задаче" (для каждой рабочей нитки). Получив задачу-терминатор, рабочая нитка засыпает на своем семафоре. Последняя засыпающая открывает семафор главной нитке. Это все Улыбающийся
10808  Компиляторы и платформы / Компиляторы / Re: gcc 4.4 (XCode) : Декабрь 11, 2009, 08:17
Интереса ради, запустил сборку 4.4.2(по своей же инструкции). Пока все пучком Подмигивающий
А у меня нет Улыбающийся  Не проходит sudo make install - она спрашивает пароль но дальше ничего не происходит. Ввожу неверный пароль - понимает, отклоняет. Пробую make install (без sudo) - начинает что-то делать, но, конечно, получаю Permission denied

В любом случае - спасибо за помощь, niXman
10809  Qt / Общие вопросы / Re: Параллельные вычисления (проблемы) : Декабрь 11, 2009, 07:43
У меня в чистом виде реализован вариант "2". Ну можно еще добавить что относительно небольшая часть расчетов (5-10%) не распараллелена и выполняется главной ниткой
10810  Компиляторы и платформы / Компиляторы / Re: gcc 4.4 (XCode) : Декабрь 11, 2009, 07:38
Я абсолютно не знаком с Мас, но очень знаком с *nix. Так вот, из исходников, компилятор собирается на ура. И скриптом устанавливается. Попробуй их сорцов собрать.
Каким образом? Я пытался прорваться так:

- набрал ./configure  Он мне много написал в консоли. Ну наверное что-то сделал, ладно
- набрал make - он начал что-то делать но загнулся на genmodes: No such file..

Ну а дальше я не знаю что набирать Плачущий
10811  Qt / Общие вопросы / Re: QPainter::drawPixmap - похоже конкретный Баг? : Декабрь 11, 2009, 07:25
Попутал (привык left, top, right, bottom Улыбающийся) Но на Mac такого нет, слева 2 красных пикселя (как в debug, так и в release). На всякий случай вот полный текст.

Код:
void Widget::paintEvent ( QPaintEvent * )  
{
QPixmap pm(10, 10);
if (1) {
QPainter painter(&pm);
painter.fillRect(QRect(0, 0, 10, 10), Qt::green);
painter.fillRect(QRect(0, 0, 1, 10), Qt::red);
painter.drawPixmap(QRect(1, 0, 9, 10), pm, QRect(0, 0, 9, 10));
}
QPainter painter(this);
painter.drawPixmap(QRect(0, 0, 10, 10), pm, QRect(0, 0, 10, 10));
}
10812  Qt / Общие вопросы / Re: QPainter::drawPixmap - похоже конкретный Баг? : Декабрь 11, 2009, 06:38
Код
C++ (Qt)
 QPixmap Pixmap(10, 10);
 QPainter Painter(Pixmap);
  Painter.fillRect(Pixmap.rect(), Qt::green); // заливаем квадрат 10х10 зеленым - ясно
 
 Painter.fillRect(QRect(0,0,1,10), Qt::red); // слева рисуем вертикальную красную полосу в 1 пиксель
 
 Painter.drawPixmap(QRect(1,0,9,10), *Pixmap, QRect(0,0,9,10)); // ???
 
А вот последняя строка непонятно что делает. Если цель - сдвиг/скролл, то QRect должны быть равны по размерам. И что куда копируется? Получается: взяли квадрат (без правой линии), и вписали его в прямоугольник на 1 пиксель меньше? Какой-то мутный сдвиг:)
10813  Компиляторы и платформы / Компиляторы / gcc 4.4 (XCode) : Декабрь 11, 2009, 06:08
Здравствуйте

Потребовался мне компилятор gcc 4.4 (нужен для одной из библиотек). Но, к сожалению, он не идет вместе с XCode IDE (хотя заявлено что да, он работает с OSX и XCode), то есть надо его "ставить". Погуглил, максимум что нашел вот это http://gcc44.darwinports.com/. Просьба: хотя бы в самых общих чертах объясните о чем речь в этой инструкции. Что я должен делать чтобы поставить? (разумеется, сам gcc я скачал). Последнюю часть (про macports) я знаю, но воспользоваться не могу (по техническим причинам). Можно как-то по-другому?

Спасибо
10814  Программирование / С/C++ / Re: Передача значений : Декабрь 10, 2009, 20:14
Код:
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
       editor->insertPlainText(tr("Файл не существует"));
QTextStream filein(&file);
Подозрительные флаги открытия. Имеет смысл проверить
Код:
if (!file.open(QIODevice::ReadOnly)) {
       editor->insertPlainText(tr("Файл не существует"));
       return;
}
QTextStream filein(&file);
Такая конструкция точно работает
10815  Qt / Пользовательский интерфейс (GUI) / Re: Обновление(перерисовка) состояния виджетов. set*** и update(). Вопрос. Qt 4.5.0 : Декабрь 10, 2009, 16:13
Правильно? Никаких логических ошибок нет?
Я лично не вижу:) Многие обработчики зовут update() и это нормально, нельзя только делать это из paintEvent
Страниц: 1 ... 719 720 [721] 722 723 ... 761

Страница сгенерирована за 0.119 секунд. Запросов: 23.