Текущий архив: 2009.10.25;
Скачать: CL | DM;
ВнизСупер-пупер-мега-сплэш Найти похожие ветки
← →
Юрий Зотов © (2009-08-19 13:21) [120]> Andy BitOff © (19.08.09 13:14) [119]
1. GetMessage сам ожидает сообщения, поэтому Sleep в цикле выборки действительно не нужен. Причина 100%-ной загрузки в чем-то другом.
2. Говорят (сам не проверял), что вместо Sleep(0) лучше использовать SwitchToThread. Результат тот же, но якобы жрет меньше тактов.
← →
Leonid Troyanovsky © (2009-08-19 13:26) [121]
> Andy BitOff © (19.08.09 13:14) [119]
> Без слипа в однопроцессорных системах загрузка CPU 100%
Неа, ты чего-то путаешь.
> Хм... Так, что ли "if (wParam and $FFF0) = SC_CLOSE then"?
Да.
--
Regards, LVT.
← →
Andy BitOff © (2009-08-19 13:28) [122]
> Юрий Зотов © (19.08.09 13:21) [120]
Ну, я не знаю в чем может быть другом. С ним не грузит, без него грузит. На самом деле я даже проверить не могу, у меня нигде не грузит, но у меня нет и одноядерных/процессорных машин, просто поступали жалобы и методом анализа компьютеров выяснилось, что загружает там где одно...
> SwitchToThread
Мне не проверить. Конечно, полагаясь на ваш опыт я могу поставить не глядя.
← →
Andy BitOff © (2009-08-19 13:32) [123]Со SwitchToThread визуально работает без изменений ;)
> Leonid Troyanovsky © (19.08.09 12:46) [118]
> Такая вещь как FileExists совершенно бесполезна.
Да, действительно. Исправлю.
← →
Andy BitOff © (2009-08-19 13:34) [124]
> Юрий Зотов © (19.08.09 13:21) [120]
> GetMessage сам ожидает сообщения
Может у меня проблема в том что, он, собственно, и не успевает ждать? У меня сразу же стартует таймер.
← →
Дмитрий Белькевич (2009-08-19 13:38) [125]Есть два предложения по сплэшАм. Сейчас как-то всё однообразно - максимум - выпирающие куски картинки.
1. Вместо сплэша показывать порно. Тянуть картинки с какого-нить сайта. Успех гарантирован.
2. Поместить на сплэш какую-нибудь увлекательную игру. Тетерис, например. Состояние запоминать, и в следующую загрузку продолжать с того же места.
← →
Anatoly Podgoretsky © (2009-08-19 13:41) [126]> Andy BitOff (19.08.2009 13:28:02) [122]
Не грузит с ним, это обман зрения, просто нет других потоков, естественно управление постоянно и сразу отдается ему, а sleep(1) и другие ожидающие функции сбивают это поведение.
← →
Andy BitOff © (2009-08-19 13:47) [127]
> Anatoly Podgoretsky © (19.08.09 13:41) [126]
Анатолий, ну как я это объясню человеку, который нажимает CAD и видит в колонке CPU значение 100. Что мне ему сказать? Не верь глазам своим, слушай меня.
← →
Leonid Troyanovsky © (2009-08-19 13:48) [128]
> Anatoly Podgoretsky © (19.08.09 13:41) [126]
> Не грузит с ним, это обман зрения
А если грузит без него, то это значит через GetMessage
идет непрерывный поток сообщений и с этим надо
внимательно разбираться.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2009-08-19 14:09) [129]> Andy BitOff (19.08.2009 13:47:07) [127]
А ничего не надо говорить, не его это дело, но если тебя это беспокоит, то отдавай слайсы с помощью sleep(1) но это уже психологическое.
← →
Anatoly Podgoretsky © (2009-08-19 14:11) [130]
> Leonid Troyanovsky © (19.08.09 13:48) [128]
Это надо изменить структуру программы, а не маскировать это с помощью sleep
← →
Leonid Troyanovsky © (2009-08-19 16:23) [131]
> Anatoly Podgoretsky © (19.08.09 14:11) [130]
> Это надо изменить структуру программы, а не маскировать
> это с помощью sleep
Во, я, наконец, вспомнил, как его зовут - костыль!
Т.е., в релизах такого уже быть не должно.
--
Regards, LVT.
← →
Юрий Зотов © (2009-08-19 17:08) [132]> Andy BitOff © (19.08.09 13:32) [123]
> Со SwitchToThread визуально работает без изменений
То есть, со 100%-ной загрузкой CPU? Тогда все в порядке.
В доке сказано, что если в системе нет нуждающихся в CPU потоков, то SwitchToThread поток не переключит. Значит, в системе активно работает только один поток - Ваш. И система, естественно, отдает ему все процессорное время.
Никакого криминала в этом нет, так и надо объяснить юзеру. Появится второй активный поток - система начнет делить время. Например, пусть запустит несколько экземпляров программы и посмотрит, как раздаются слоны.
← →
Leonid Troyanovsky © (2009-08-19 19:19) [133]
> Юрий Зотов © (19.08.09 17:08) [132]
> То есть, со 100%-ной загрузкой CPU? Тогда все в порядке.
Чего ж тогда многопроцессорные не жалуются?
Тут, IMHO, стоит неспеша разобраться.
Хотя (т.к. я не запускал пример by Andy из-за большого кол-ва requried),
могу допустить, что все поглощает анимация.
--
Regards, LVT.
← →
Andy BitOff © (2009-08-19 19:28) [134]> Юрий Зотов © (19.08.09 17:08) [132]
> То есть, со 100%-ной загрузкой CPU? Тогда все в порядке.
Нет. У меня такой загрузки нет. Поэтому и проверить не могу.
← →
Leonid Troyanovsky © (2009-08-19 19:43) [135]
> Andy BitOff © (19.08.09 19:28) [134]
> Нет. У меня такой загрузки нет. Поэтому и проверить не могу.
А если заказать потокам процесса выполняться только на одном процессоре?
--
Regards, LVT.
← →
Andy BitOff © (2009-08-19 20:24) [136]> Leonid Troyanovsky © (19.08.09 19:43) [135]
Как?
Проверить смогу только завтра.
← →
Leonid Troyanovsky © (2009-08-19 20:34) [137]
> Andy BitOff © (19.08.09 20:24) [136]
SetAffinityMask?
--
Regards, LVT.
← →
Andy BitOff © (2009-08-19 20:42) [138]Спасибо. Завтра попробую.
← →
Loginov Dmitry © (2009-08-19 22:35) [139]> [88] Суслик_ (18.08.09 17:51)
Рад, что от разработки есть польза :)
Там косяк есть кстати: проверяется результат функции RegisterClass(),
однако результат 0 еще не свидетельствует об ошибке, нужно еще
GetLastError сравнивать с ERROR_CLASS_ALREADY_EXISTS, иначе после
черезы LoadLibrary / FreeLibrary перестает работать.
← →
Andy BitOff © (2009-08-20 10:16) [140]
> Leonid Troyanovsky © (19.08.09 20:34) [137]
Всё равно не выходит 100, максимум чего добиваюсь 40, в среднем 15-18. При обычном (без установки SetThreadAffinityMask) 2-5.
← →
Юрий Зотов © (2009-08-22 20:59) [141]> Rouse_ © (18.08.09 12:38) [63]
Думаю, ты все же неправ, Саид. RedrawWindow здесь не вызывается, а SetWindowPos работает ничуть не хуже ShowWindow и была использована для центрирования сплэша одновременно с его показом.
> DVM © (18.08.09 23:30) [90]
> Нету проверки на результат RegisterClassEx(),
> CreateWindowEx(), LoadBitmap()
Специально. Проверки подобного рода я считаю параноидальными, чем-то вроде этого:i := 3;
if i <> 3 then ...
Теоретически, присваивание тоже может не сработать, но вероятность этого слишком ничтожна, чтобы на нее закладываться и загромождать код проверками.
> Отсутствует закрытие хендла ThreadHandle
А вот за это спасибо. Действительно, упустил.
> All
Здесь приведен модифицированный вариант сплэша, в котором устранены отмеченные недостатки и решена проблема вывода главной формы программы на передний план:
http://www.delphikingdom.com/asp/articles_forum.asp?ArticleID=1411
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2009.10.25;
Скачать: CL | DM;
Память: 0.76 MB
Время: 0.05 c