Регистрация
Регистрация Поиск Сообщество  
CGM > Всякая всячина > Поговорим за жизнь
Опции темы

Непонятные тормоза в Delphi

Важные объявления
Старый 13.05.2006, 20:21   #21 (permalink)
Старожил
 
Регистрация: 14.03.2005
Адрес: Moscow
Сообщений: 1,078
to Sphinx:
Ну мне это как бы не надо
Проги для себя пишу так как быстрее и удобнее, то есть дельфи.
Ну я по работе, пишу на php и использую SQL больше мне как бы ничего и не надо

to Grey:
Во во, програмка то была совсем маленькая. А с Win API... я ее не знаю
Ушел в веб-программирование
backgammon вне форума      
Старый 13.05.2006, 20:52     TS Старый   #22 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Вернемся к теме. Все же меня этот гондурас беспокоит. Кому не лень -- протестируйте эти две проги (упрощенный вариант первоначальной проблемы). Различаются только наличием/отсутствием кнопки типа TSpeedButton, которая никакой роли не играет. При нажатии кнопки "button" включается таймер на 1 секунду, и генерируются случайные числа от 0 до 51. По отработке таймера выводится количество сгенерированных чисел. У меня стабильная разница в 5%:

Название: Captured2.png
Просмотров: 214

Размер: 2.7 Кб

У кого есть Дельфи, могут сами состряпать. Вот исходник:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Timer1: TTimer;
BitBtn1: TBitBtn;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
procedure Timer1Timer(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
stop: boolean;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled := false;
bitbtn1.Enabled := true;
stop := true;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
w: word;
begin
bitbtn1.Enabled := false;
stop := false;
i := 0;
edit1.Text := '...';
timer1.Interval := 1000;
timer1.Enabled := true;
repeat
application.ProcessMessages;
inc( i );
w := random( 52 );
until stop;
edit1.Text := inttostr( i );
end;

end.
Вложения
Тип файла: exe tormoz1.exe (158.5 Кб, 84 просмотров)
Тип файла: exe tormoz2.exe (160.5 Кб, 83 просмотров)
__________________
Arthur Grey
Grey вне форума      
Старый 13.05.2006, 21:19   #23 (permalink)
Участник
 
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
Я попробую угадать, что дело в
ProcessMessages
эта фигня останавливает выполнение твоей проги и ждет очистки очереди сообщений, а она(очередь) с разными компанентами может иметь разную длинну. Вот и все.
Сделай все это в отдельном потоке и не будет таких проблем.
mikx вне форума      
Старый 13.05.2006, 21:40     TS Старый   #24 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Цитата:
Сообщение от mikx писал
Я попробую угадать, что дело в
ProcessMessages
Гадать не надо, надо попробовать. Не влюёт совершенно. И потом, неясно, почему одна группа компонент никак не замедляет выполнение, а другая замедляет. Я не смог найти ничего общего между ними...
__________________
Arthur Grey
Grey вне форума      
Старый 13.05.2006, 21:43   #25 (permalink)
Старожил
 
Регистрация: 14.03.2005
Адрес: Moscow
Сообщений: 1,078
у меня случается и с кнопкой больше.
ну наверно в зависимости от текущей задачи, много фоновых процессов.
backgammon вне форума      
Старый 13.05.2006, 21:44   #26 (permalink)
Участник
 
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
Цитата:
Сообщение от Grey писал сб, 13 мая 2006 21:40
Цитата:
Сообщение от mikx писал
Я попробую угадать, что дело в
ProcessMessages
Гадать не надо, надо попробовать. Не влюёт совершенно. И потом, неясно, почему одна группа компонент никак не замедляет выполнение, а другая замедляет. Я не смог найти ничего общего между ними...
Напиши мне в личку, у меня делфи нет.
А какой код был без ProcessMessages очень интересно.
или как ты проверил написав - "Не влюёт совершенно."
mikx вне форума      
Старый 13.05.2006, 21:49     TS Старый   #27 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Цитата:
Сообщение от mikx писал
А какой код был без ProcessMessages очень интересно.
или как ты проверил написав - "Не влюёт совершенно."
Ну немного другой, конечно. В данном конкретном случае без него просто зависнет. Там было фиксированное количество раздач, и замерялось время при помощи MillisecondsBetween(). Но суть та же -- присутствие любой из перечисленных ранее компонент существенно тормозило выполнение.
__________________
Arthur Grey
Grey вне форума      
Старый 13.05.2006, 21:51     TS Старый   #28 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Цитата:
Сообщение от backgammon писал
у меня случается и с кнопкой больше.
ну наверно в зависимости от текущей задачи, много фоновых процессов.
Для чистоты эксперимента все фоновые задачи лучше убрать.
__________________
Arthur Grey
Grey вне форума      
Старый 13.05.2006, 21:51   #29 (permalink)
Ветеран
 
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
Во-во.. mikx скорее всего прав.

лучше сделай так:

var
Tick1, Tick2: DWord;

...

Tick1 := GetTickCount;

// code here..

Tick2 := GetTickCount;
if Abs(Tick2-Tick1) <> 300 then
Application.ProcessMessages;
Tick1 := Tick2;

...

300 -- время в миллисекундах (ставь то какое нужно). Так ОС не будет думать, что твоя прога зависла..

а еще лучше на 250-300 делай HandleMessage а на 400-500 ProcessMessage..

__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883
Sharky вне форума      
Старый 13.05.2006, 21:55   #30 (permalink)
Участник
 
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
Цитата:
Сообщение от Grey писал сб, 13 мая 2006 21:49
Цитата:
Сообщение от mikx писал
А какой код был без ProcessMessages очень интересно.
или как ты проверил написав - "Не влюёт совершенно."
Ну немного другой, конечно. В данном конкретном случае без него просто зависнет. Там было фиксированное количество раздач, и замерялось время при помощи MillisecondsBetween(). Но суть та же -- присутствие любой из перечисленных ранее компонент существенно тормозило выполнение.
Попробуй сделать все тоже самое в отдельном потоке !!!!
погляди что будет.
Вообще если код оторван от интерфейса то скорость его выполнения не
может зависить от компанентов.
mikx вне форума      
Старый 13.05.2006, 22:11     TS Старый   #31 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Цитата:
Сообщение от Grey писал
Для чистоты эксперимента все фоновые задачи лучше убрать.
Написал, а сам подумал -- может быть, перезапустить Windoze? Ну перезапустил. Эффект тот же, только с точностью до наоборот:

Название: Captured3.png
Просмотров: 176

Размер: 2.7 Кб

Маст дай, однозначно.
__________________
Arthur Grey
Grey вне форума      
Старый 13.05.2006, 22:14   #32 (permalink)
Участник
 
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
выньДОС это вещ
mikx вне форума      
Старый 13.05.2006, 22:16   #33 (permalink)
Ветеран
 
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
В любом случае прислушайся к моему совету... Вызывать листенеры после каждого сложение или умножения -- глухой путь.. имхо.
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883
Sharky вне форума      
Старый 13.05.2006, 22:27     TS Старый   #34 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Кстати, в основной задаче (в отличие от этих демок) даже после перезагрузки все осталось по-прежнему. Тормозит на 25%. Попробую с тредами, но не раньше понедельника :*), потом отпишу, что получится.
__________________
Arthur Grey
Grey вне форума      

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DIR 615 непонятные обрывы screamwithme Железо 7 26.04.2010 00:36
Три непонятные мне раздачи. L!sichka Одностоловые турниры 2 05.11.2009 07:25
Непонятные мне лимпы %-\\ Karn Многостоловые турниры 3 19.05.2009 01:30
Непонятные статы GreyNW Покер софт 11 15.03.2009 23:06
Непонятные мне ситуации. HollanderSk8er Одностоловые турниры 18 07.02.2009 02:51



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Быстрый переход
Правила форумов CGM Контакты Справка Обратная связь CGM.ru Архив Вверх Главная
 
Использование материалов сайта разрешено только при наличии активной ссылки на источник.
Все права на картинки и тексты принадлежат Информационному агентству CGM и их ПАРТНЕРАМ. Политика конфидециальности
CGM.ru на Youtube CGM.ru на Google+ CGM.ru в Twitter CGM.ru на Facebook CGM.ru в vKontakte CGM.ru в Instagram

В сотрудничестве с Pokeroff.ru
Текущее время: 23:32. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot