Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мерцание и Двойная Буферизация [D7, WinXP]


Страницы:   1 2

Паша555 ©   (2005-01-11 01:53:00) 

Помогите решить проблему.
На форме по таймеру происходит перемещение TLabel.
Без Двойной Буферизации - мерцание
При включении - недостаточная скорость перемещения метки....
При добавлении графики (TImage)на форму - еще более уменьшается скорость передвижения слова.....

Какими путями можно избежать всех вышеописанных минусов ?
(OpenGL или DirectX?????)
Заранее спасибо !


sniknik   (2005-01-13 23:58:00) [1]

> Даже если поставить sleep(1) все равно движется очень медленно.
> А если сделать, как я говорю - быстро.
> Вопрос: почему?
sleep это "засыпание" потока т.е. приостанов и передеча ресурсов другим, даже поставив sleep(0) ты как бы отдаеш управление другим потокам, естественно это медленнее чем даже весь твой цикл (тут я обсчитался, но я в обшем и не считал, так навскидку дал)

а за счет чего разница (почему)?... винда какая? диспетчер задач есть? открой его и посмотри на загруженность проца в том и другом случае...
у тебя, пустой в общемто код на 100% занимает систему, у меня на 0.001% (от машины будет зависеть, если вообще удастся увидеть)
а если у меня sleep убереш то получиш ту же самую скорость (кому оно нужно? прочитать не успееш, мелькает чтото) с той же загруженностью.
а от Application.ProcessMessages; (на что основной упор про неправильность) она практически не зависит.

> Да, Архангельского начитался =-)))))))))))
выброси, если еще не поздно. ;о)


bulkas   (2005-01-13 22:33:00) [2]

Я естественно попробывал.
Даже если поставить sleep(1) все равно движется очень медленно.
А если сделать, как я говорю - быстро.
Вопрос: почему?

Да, Архангельского начитался =-)))))))))))


sniknik   (2005-01-13 20:53:00) [3]

> Вобще потоки насколько я знаю нельзя использовать для изменения свойств визуальных компонентов.
через синхронизацию можно.


sniknik   (2005-01-13 20:51:00) [4]

> Вот прежде чем лупить куда не попадя слипы, проверь как это будет работать, я сам знаю как в книжке написано.
> Поставь слип, проверь, и увидишь в чем разница.
не горячись так. ;о)) и лучше сам проверь. мой вариант в отличии от твоего более правильный. (можеш спросить тут на форуме, да и на любом другом)

а книжки... ;о)) знаем такие, небось архангельского начитался... ;о))) (там еще и не то есть)


bulkas   (2005-01-13 18:49:00) [5]

Вобще потоки насколько я знаю нельзя использовать для изменения свойств визуальных компонентов.
И приведенный мной пример изначально неверен.

Но факт в том , что он работает и причем хорошо работает, но в том случае, если никакие другие процессы в программе не вызывают большую нагрузку.

Вопрос был как запустить бугущую строку быстро - я дал ответ.


bulkas   (2005-01-13 18:35:00) [6]

Вот прежде чем лупить куда не попадя слипы, проверь как это будет работать, я сам знаю как в книжке написано.
Поставь слип, проверь, и увидишь в чем разница.


sniknik   (2005-01-13 09:03:00) [7]

> procedure TRunStringThread.Execute;
> var i:Integer;
> begin
>  while true do
>  begin
>      Synchronize(MotionRunString);
>      Application.ProcessMessages;
>      for i:=0 to 2999999 do;
>  end;
> end;

вот это очень криво, так в потоках не делают
(уже надоело обьяснять почему, поиши здесь ветки про потоки)
вот так будет правильнее
procedure TRunStringThread.Execute;
begin
while not terminated do begin
  Synchronize(MotionRunString);
  Sleep(10); //ну не знаю какой задержки он хотель допится тем пустым циклом, подбери
end;
end;


Kerk   (2005-01-13 05:19:00) [8]

Поручик ©   (13.01.05 2:00) [19]
НИ В КОЕМ СЛУЧАЕ НЕ ИСПОЛЬЗУЙ DELPHIX

а почему? звучит слишком категорично.


Паша555   (2005-01-13 04:47:00) [9]

на сегодня все - уже голова не варит
Завтра думаю появятся :)


Поручик   (2005-01-13 04:12:00) [10]

В твоем случае, лучше не мараться с DelphiX, это безполезная трата времени, имхо. Тебе хватит и Canvas.
Какие еще вопросы?


Паша555   (2005-01-13 04:06:00) [11]

Не ссорьтесь, парни :)
Все посмотрю все выучу, Вы только помогайте !!!
Спасибо за ответы
Обязательно попробую как сказал и Поручик и Bulkas
И DelphiX и GLScene раньше просматривал немного, что это такое представление имею немного.....
Мое мнение, насчет DelphiX - конечно что-то серьезное не сделать, но для решения мелких задач можно использовать....
Пишу что-тоо вроде игрушки ребенку для улучшения техники чтения...
Там со словами игра на реакцию....


Поручик   (2005-01-13 02:44:00) [12]

bulkas   (13.01.05 2:17) [21]
Ты его хочешь посадить на DirectX, OpenGL или API, да он разбираться будет месяц, если не больше не вылазя из-за компа.

Ты читал эту ветку или нет? Наверное нет, посмотри первый пост.

> Радости от жизни-то по началу надо получать.

Вот пусть и получает - рисует на GDI

> Вот и пусть поюзает DelphiX.

Вот этого не надо, DelphiX - тупиковая фигня, ну поюзает, и это ему ничего не даст.
А так немного познакомится с устройством Windows


> Потом сам поймет когда надо перейти на более серьёзные
> вещи.

Это обязательно


bulkas   (2005-01-13 02:17:00) [13]

Да не надо гнать про дельфи икс, про движение картинок и т.п.
Человек еще толком дельфи не знает.
Ты его хочешь посадить на DirectX, OpenGL или API, да он разбираться будет месяц, если не больше не вылазя из-за компа.

Радости от жизни-то по началу надо получать.
Вот и пусть поюзает DelphiX.

Потом сам поймет когда надо перейти на более серьёзные вещи.


bulkas   (2005-01-13 02:13:00) [14]

Ну встречался ты или не встречался с потоками это дело твоё.
Я тебе предложил два варианта:
Поток или DelphiX.

Пример с потоком скинул тебе на мыло.

Но я тебе советую для начального уровня, если собираешься заниматься графикой освоить DelphiX.


Поручик   (2005-01-13 02:00:00) [15]

НИ В КОЕМ СЛУЧАЕ НЕ ИСПОЛЬЗУЙ DELPHIX
Это вторая заповедь программиста графики, после "не двигай image"
А что ты делаешь? Игру или еще что-то, расскажи.


Паша555   (2005-01-13 01:39:00) [16]

Я с потоками еще ни разу не встречался (уровень у меня не тот....)
Может пример на fur_surfen@web.de скинете ????
Непонятно зачем панель....
Буду разбираться.........
Спасибо большое.


bulkas   (2005-01-13 01:10:00) [17]


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type

 TForm1 = class(TForm)
   Panel1: TPanel;
   StaticText1: TStaticText;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 TRunStringThread = class(TThread)
   procedure Execute; override;
   procedure MotionRunString;
 end;

var
 Form1: TForm1;
 RunStringThread:TRunStringThread;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
 RunStringThread:=TRunStringThread.Create(True);
 RunStringThread.Priority := tpIdle;
 RunStringThread.Resume;
end;

procedure TRunStringThread.Execute;
var i:Integer;
begin
 while true do
 begin
     Synchronize(MotionRunString);
     Application.ProcessMessages;
     for i:=0 to 2999999 do;
 end;
end;

procedure TRunStringThread.MotionRunString;
begin
 Form1.StaticText1.Left:=Form1.StaticText1.Left-1;
 if Form1.StaticText1.Left=-Form1.StaticText1.Width then Form1.StaticText1.Left:=Form1.Panel1.Width;
end;

end.


Cobalt   (2005-01-13 01:04:00) [18]

На мой взгляд - для такого случая проще использовать окно класса STATIC


bulkas   (2005-01-13 00:37:00) [19]

а вобще мыло напиши сброшу, посмотришь по человечески.


bulkas   (2005-01-13 00:36:00) [20]

вобще-то для несложных задач, советую испльзовать DelphiX, очень удобно и просто, описаний и хелпа - навалом.
ну а если хочешь морочиться стандартными средствами щас напишу.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо