Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.78 MB
Время: 0.032 c
2-1251037909
Начинающий17
2009-08-23 18:31
2009.10.25
работа с файлом


2-1251798189
Franzy
2009-09-01 13:43
2009.10.25
Запуск расчета сразу после отрисовки формы


15-1251110503
02468
2009-08-24 14:41
2009.10.25
COM(delphi) + PHP


2-1251724890
Rendal
2009-08-31 17:21
2009.10.25
Создание объявлений для большого числа компонентов.


2-1250691718
DimDim
2009-08-19 18:21
2009.10.25
Сохранение в ini